2017-01-04 7 views
-2

Ich versuche, Spalten für alle zu aktualisieren. Der festgelegte Teil der update-Anweisung wird erstellt und dann an die for all-Anweisung übergeben. Es kann mehrere Spalten im Set-Teil geben. Aber es wirft einen Fehler auf: "fehlendes Gleichheitszeichen". Irgendeine andere Methode, um das zu lösen?Update mehrere Spalten mit für alle

DECLARE 
    V_COL_LIST VARCHAR2(4000); 
    type emp_t 
    IS 
    TABLE OF NUMBER; 
    emp_id emp_t; 
BEGIN 
    SELECT employee_id bulk collect 
    INTO emp_id 
    FROM employees 
    WHERE department_id=10; 

    V_COL_LIST:='SALARY=EMPLOYEE_ID'; 

    FORALL INDX IN 1..emp_id.count 
    UPDATE EMPLOYEES SET V_COL_LIST 
    WHERE EMPLOYEE_ID=emp_id(indx); 
END; 
+1

Ich habe Sie nicht gesehen akzeptieren oder stimmen alle Antworten, wenn Leute antworten. Ist es die CSA, die Sie nicht bekommen, was Sie erwarten, oder Sie wissen nicht, was tun, wenn jemand Ihre Frage beantwortet. Ich empfehle dringend, dass Sie den Link http://StackOverflow.com/Help/Someone-answers gehen. – XING

+1

Ihre UPDATE-Anweisung würde nicht als einfache SQL arbeiten, also warum sollten Sie erwarten, dass es in einer FORALL-Anweisung funktioniert? Sie sollten mit dem Schreiben von gültigem SQL beginnen und es dann so anpassen, dass es in einer Massenoperation funktioniert. – APC

Antwort

1

Die von Ihnen verwendete Syntax wird nicht erkannt. Sie können hierzu dynamisches SQL verwenden. Ich sehe jedoch nicht warum Sie Gehalt zu employee_i d in SALARY=EMPLOYEE_ID einstellen. Bitte überprüfen Sie Ihre Logik.

Verwendung dynamischer SQL:

DECLARE 
    V_COL_LIST VARCHAR2(4000); 
    type emp_t 
    IS 
    TABLE OF NUMBER; 
    emp_id emp_t; 
BEGIN 
    SELECT employee_id bulk collect 
    INTO emp_id 
    FROM employees 
    WHERE department_id=10; 

    V_COL_LIST:='SALARY=1000'; 

    FORALL INDX IN 1..emp_id.count 
     execute immediate 'UPDATE EMPLOYEES SET ' || V_COL_LIST 
    ||' WHERE EMPLOYEE_ID=:1' using emp_id(indx); 
END; 
/

Wenn Sie wissen, welche Spalten, was zu setzen sind, nur du schlicht Update-

DECLARE 
    type emp_t 
    IS 
    TABLE OF NUMBER; 
    emp_id emp_t; 
BEGIN 
    SELECT employee_id bulk collect 
    INTO emp_id 
    FROM employees 
    WHERE department_id=10; 

    FORALL INDX IN 1..emp_id.count 
     UPDATE EMPLOYEES SET COL1 = 'ABC', COL2 = 'DEF' 
     WHERE EMPLOYEE_ID = emp_id(indx); 
END; 
/
Verwandte Themen