2016-09-27 6 views
0

私は(10K行の上に)私のテーブルを更新するストアドプロシージャを実装しようとしています が、行の唯一の一定量を処理するためにrownumストアドプロシージャのOracle SQLは、大規模なクエリ

現在の手順:

 create or replace PROCEDURE P_UPDATETOANON AS 
BEGIN 
     UPDATE PERSONENVERKEHR_VERTRIEBSSYS15.HIST_TEST 
     SET TS_RESPONSIBLE = 'test' 
     WHERE TS_RESPONSIBLE != 'test' 
     AND length(TS_RESPONSIBLE) > 3; 

END P_UPDATETOANON; 

Error(3,10): PL/SQL: SQL Statement ignored 
Error(3,48): PL/SQL: ORA-01031: insufficient privileges 

特定のデータレコードの更新のみを実装するにはどうすればよいですか?

+0

行を更新する必要があるかどうかをどのように決定しますか?サンプルデータと希望の結果を投稿してください – Aleksej

+0

この手順の動機は、 "TS_RESPONSIBLE"列のユーザーを匿名化し、それらを 'テスト'に設定することです –

+0

[OK]をクリックします。 TS_RESPONSIBLE> 3かつTS_RESPONSIBLE!= 'test'の1000行があり、どの行を更新するとしますか? – Aleksej

答えて

1

あなたはどれを決定するために、任意のロジックなしに、行の唯一の一定量を更新する必要がある場合は、単に必要な場合があります

UPDATE PERSONENVERKEHR_VERTRIEBSSYS15.HIST_TEST 
    SET TS_RESPONSIBLE = 'test' 
WHERE TS_RESPONSIBLE != 'test' 
    AND length(TS_RESPONSIBLE) > 3 
    AND rownum < 100 /* for example */ 

あなたのユーザがテーブルを更新する権限を持っていなくてもようです。最初に

grant update on PERSONENVERKEHR_VERTRIEBSSYS15.HIST_TEST to MQCDBA 

がテーブルまたは他の許可されたユーザーの所有者によって指定されている必要があります。

+0

特定のレコードのみを更新するには? (Top 10/rownum <10?) サブセレクトが必要だと聞きましたが、ビルド方法はわかりません。 –

+0

rownumを使用するには、まずデータを選択する必要がありますか、私は奇妙なrownumsを取得するか、間違っていますか? 私の投稿に編集された私の現在のストアドプロシージャ –

+0

ロジックを持たない行をいくつか更新したい場合、rownumはOKです。更新する行を決定する場合は、必要なロジックを削除してください。あなたが投稿したエラーは、あなたのログインユーザがテーブル – Aleksej

関連する問題