2016-12-06 2 views
0

エラーが発生します。PL/SQL:ORA-00913:値が多すぎます。 ここで何をしようとしていますか、私の更新ステートメントは複数の行に影響します。 そして、キャプチャして、影響を受ける行を別のテーブルに記録しておきたい。 助けてください。 ベローズコードの場合。キャプチャして、影響を受けた行を別のテーブルに記録します。

DECLARE 
    TYPE cusRec IS TABLE OF customer%ROWTYPE INDEX BY PLS_INTEGER; 
    v_cusRec cusRec; 

    BEGIN 

    UPDATE customer 
    SET l_optionalmail = 1 
    WHERE c_customer_id IN ( SELECT c_customer_id 
          FROM  customer cus, 
            agent age 
          WHERE cus.c_customer_id = age.c_customer_id 
          AND cus.l_optionalmail = 0 
          GROUP BY age.c_customer_id 
          HAVING MIN (age.d_movein) >=SYSDATE-1) 
     RETURNING cus.c_customer_id,cus.c_lastname,l_optionalmail 
    BULK COLLECT INTO v_bif001Rec; 
    DBMS_OUTPUT.PUT_LINE('Updated l_optionalmail column ' || SQL%ROWCOUNT || ' Rows.'); 
    FOR i IN v_bif001Rec.FIRST..v_bif001Rec.LAST LOOP 

     INSERT INTO l_optionalmail_wrk(c_customer_id,c_lastname,l_optionalmail,d_created) 
     VALUES (v_bif001Rec(i).c_customer_id,v_bif001Rec(i).c_lastname,v_bif001Rec(i).l_optionalmail,SYSDATE); 
    END LOOP; 
    END; 
+0

私には、v_bif001Recの問題のようです。エラーログを提供できますか? – Rakesh

答えて

0

エラーが明確にupdateの文から、あなたがreturningある列がbif001Rec V_あなたのコレクションに定義された列よりもmoreであると述べています。コードを正常に実行する方法をご覧ください。 recordを作成してから、同じ列を持つレコードのtableを更新ステートメントから戻しています。

DECLARE 
    TYPE cusRec IS TABLE OF employee%ROWTYPE INDEX BY PLS_INTEGER; 

    v_cusRec cusRec; 

    ---List down all the columns which you are returning from the update statement 
    type emp_rec is record 
    ( 
    EMPLOYEE_ID NUMBER(5), 
    FIRST_NAME VARCHAR2(20 CHAR), 
    LAST_NAME VARCHAR2(20 CHAR) 
    ); 

    type v_bifRec is table of emp_rec index by pls_integer; 
    v_bif001Rec v_bifRec; 

BEGIN 
     UPDATE employee emp 
     SET emp.dept_no = 10 
     WHERE emp.employee_id IN ( SELECT id_e 
            from employees 
            ) 
    RETURNING emp.employee_id, emp.first_name, emp.last_name 
     BULK COLLECT INTO v_bif001Rec; 

    DBMS_OUTPUT.PUT_LINE ('Updated l_optionalmail column ' || SQL%ROWCOUNT || ' Rows.'); 

    FOR i IN v_bif001Rec.FIRST .. v_bif001Rec.LAST 
    LOOP 

    --You can insert your records here. I Just displayed it. 

    dbms_output.put_line('Employee_id= '||v_bif001Rec(i).EMPLOYEE_ID ||'Employee_First_name --'||v_bif001Rec(i).FIRST_NAME||'Employee Last_name--'||v_bif001Rec(i).LAST_NAME);  

    /*INSERT INTO l_optionalmail_wrk (c_customer_id, 
             c_lastname, 
             l_optionalmail, 
             d_created) 
      VALUES (v_bif001Rec (i).c_customer_id, 
        v_bif001Rec (i).c_lastname, 
        v_bif001Rec (i).l_optionalmail, 
        SYSDATE); */ 
    END LOOP; 
END; 
+0

ええ、ありがとう、私は問題を解決しました。もう一度お返事します – Sohel

+0

あなたの問題を解決すれば、読者は将来それを使うことができるように答を逃すことができます。 – XING

関連する問題