この作業を実行して、この表に多数の行があります。PL/SQLでは、手動で問合せ内の権限が不十分です
この表には2つの列があります:私はPKとしてFOOを持っていると私はそれらの値を知っている
FOOとBAR
を、彼らは両方の数字ですが、私はバーで任意の値を持っていません。
問題なくすべてのクエリを手動で実行できますが、このPL/SQLを作成して、別のクエリでBAR値を見つける必要があると問題なく自動的に実行されます。
create or replace procedure FxB_pro
IS
tmpFIELD NUMBER := 0;
i NUMBER := 0;
cursor c1 is
SELECT * FROM FooXBar WHERE BAR IS NULL;
BEGIN
FOR CTUpdate IN c1
LOOP
BEGIN
SELECT t5.bar INTO tmpFIELD FROM table_1 t1, table_2 t2, table_3 t3, table_4 t4, table_5 t5, table_6 t6
where t1.fielda_id = t2.fielda_id
and t2.fielda_id = t3.fielda_id
and t3.fieldb_id = t4.fieldb_id
and t3.fieldb_id = t6.fieldb_id
and t4.fieldd_id = t5.fieldc_id
and t1.fieldc = CTUpdate.FOO
and rownum = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
tmpFIELD :=null;
END;
UPDATE FooXBar set BAR = tmpFIELD where FOO=CTUpdate.FOO;
i := i+1;
IF mod(i, 1000) = 0 THEN -- Commit every 1000 records
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
私はきちんとテスト環境 PL/SQLが作成され、実行中でこれをテストしてみたが、私は生産にそれを実行するつもりだとき、私は選択ウィッヒでこのエラーが入れていますtmpFIELDの値:
Erro(12,11): PL/SQL: SQL Statement ignored
Erro(12,143): PL/SQL: ORA-01031: insufficient privileges
私はなぜこれが起こっていることは理解できない、誰かが私を助けてくださいことができますか?
エラーは非常に明確です。本番環境では権限がありません。これらのテーブルを読み取る権限がありません(ローカル変数に割り当てる特権はありません)。デフォルトでは、権限は「定義者」(プロシージャを作成したユーザー)の権限です。プロシージャを起動者の特権で実行させることもできます(必要な場合はそのドキュメントを参照してください)。 https://docs.oracle.com/cd/E21901_01/timesten.1122/e21639/accesscntl.htm#TTPLS273 – mathguy
DBでadm userを使用していても、個別にクエリを実行できますか?私は今、おかげです。私はこれを検索します。 – Imkls