ストレージ・プロシージャの実行時にORA-01031に報告する権限が不足している

1534 ワード

Oracleストレージでは、デフォルトではDMLとDQLを直接実行できますが、createやdropのようなDDLを実行するには、EXECUTE IMMEDIATEを使用する必要があります.
  -- 
  SELECT TO_CHAR(SYSDATE, 'YYYY') INTO V_N FROM DUAL;
  V_CREATESQL := 'CREATE TABLE TEXT_' || V_N ||
                 '_T AS SELECT * FROM TEXT';
  EXECUTE IMMEDIATE V_CREATESQL;


この文を実行すると、ORA-01031:権限が不足していることを示すプロンプトが表示されます.このユーザはDBA権限を付与している.
理由:CREATE TABLEはCREATE ANY TABLE権限を使用しようとしますが、CREATE ANY TABLE権限はDBAロールから来ています.デフォルトでは、セッション環境では表示されますが、ストレージ中は表示されません(無効).
すなわち、ORACLEのデフォルトは定義者権限であり、定義者権限はストレージ中にROLEが無効であり、明示的な権限が必要である.
grant CREATE TABLE to [username];