ユーザーAにプロシージャを作成して、セッション・ユーザー(プロシージャを実行したことがあるユーザー)に属するテーブルのリストを取得し、テーブルに挿入しました。しかし、私はユーザーBからプロシージャを実行します。値を取得していない、私はsession_user値がプロシージャに渡されていないことを意味する?? I enter code here
これは予想どおりの動作ですか?プロシージャの実行中に実際にセッションのユーザーを渡さずにセッションユーザーに渡す方法はありますか(それはそれ自体で必要です)?プロシージャにセッションのユーザー値を渡します。
表:私が実行しようとしています
CREATE TABLE "ABCD"
( "USERNAME" VARCHAR2(1`enter code here`00 BYTE),
"TABLE_NAME" VARCHAR2(100 BYTE)) ;
が手順:
CREATE OR REPLACE PROCEDURE "SESS_USR_OBJECTS" AS
V_USER varchar2(50):= SYS_CONTEXT('USERENV','SESSION_USER');
cursor SEL_CUR is select OWNER,TABLE_NAME from all_tables where owner in (V_USER);
SEL_REC SEL_CUR%ROWTYPE;
VSQL1 VARCHAR2(100);
BEGIN
OPEN SEL_CUR;
LOOP
FETCH SEL_CUR INTO SEL_REC;
EXIT WHEN SEL_CUR%NOTFOUND;
VSQL1:= 'insert into ABCD VALUES ('''||SEL_REC.OWNER||''','''||SEL_REC.TABLE_NAME||''')';
Dbms_Output.Put_Line(VSQL1);
EXECUTE IMMEDIATE VSQL1;
COMMIT;
END LOOP;
CLOSE SEL_CUR;
END;
When I runt the procedure nothing is being inserted into table.
Yes, user B has access to run the procedure in A.
Matthewに感謝、あなたのトリックが働いた。 –
私はそれを「トリック」として特徴づけることはできませんが、歓迎します:)あなたの質問に最もよく答えると感じたら私の答えを受け入れることを検討してください。 –
真の "トリック"ではありません。私はここでより多くの情報を見つけました:http://www.dba-oracle.com/t_authid_current_user.htm –