2016-09-27 32 views
0

我試圖執行一個存儲過程,它更新我的表(超過10,000行) 但只有一定量的行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」列中的用戶並將其設置爲'test' –

+0

好的,但尚不清楚需要更新哪些數據;假設你有1000行,TS_RESPONSIBLE> 3 AND TS_RESPONSIBLE!='test',你會更新哪些行? – 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就可以。如果您想決定更新哪些行,請擴展您所需的邏輯。您發佈的錯誤是由於您的登錄用戶無權更新表 – Aleksej