質問

あるユーザーのテーブルから別のスキーマにデータをコピーするストアドプロシージャを作成しています。基本的に、それは一連の挿入です。このような選択ステートメントを選択してください。

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>;

トム・カイトによるこの記事 追加情報が含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top