Oracleストアドプロシージャ内で別のユーザーのテーブルにアクセスする
-
10-10-2019 - |
質問
あるユーザーのテーブルから別のスキーマにデータをコピーするストアドプロシージャを作成しています。基本的に、それは一連の挿入です。このような選択ステートメントを選択してください。
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = 1234;
これは、sqlplus(または私のためにヒキガエル;-))から発行するときに正常に動作しますので、私は十分な特権があることを知っていますが、これは次のようなストアドプロシージャの一部である場合:
CREATE OR REPLACE FUNCTION COPY_KONG
(pKongNr IN NUMBER)
RETURN NUMBER
AUTHID CURRENT_USER
IS
BEGIN
INSERT INTO GESCHAEFTE
SELECT *
FROM TURAT03.GESCHAEFTE
WHERE kong_nr = pKongNr;
END;
Oracleエラーが発生します:
[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist
ご覧のとおり、私はすでに挿入しました AUTHID
, 、しかし役に立たない。
他に何ができますか?私はここで私のアイデアの終わりにほとんどいます。
解決
手順の所有者は、基礎となるオブジェクトに直接アクセスするための特権を付与されなければなりません。 役割を通してではありません. 。手順と同じレベルのアクセスを取得するには、次のコマンドを使用してください。
SET ROLE NONE;
手順から別のテーブルにアクセスするには、役割を通じてではなく、直接選択する必要があります。
GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;
トム・カイトによるこの記事 追加情報が含まれています。
所属していません StackOverflow