-2

for all を使用して列を更新しようとしています。update ステートメントの set 部分が作成され、for all ステートメントに渡されます。セット部分には複数の列が存在する可能性がありますが、「等号がありません」というエラーがスローされます。これを解決する他の方法はありますか?

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;
4

1 に答える 1

1

使用した構文は認識されません。これを行うには、動的 SQL を使用できます。ただし、給与を employee_id in に設定する理由がわかりません。ロジックを確認してください。SALARY=EMPLOYEE_ID

動的 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;
/

どの列を何に設定するかがわかっている場合は、単純に更新してください-

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;
/
于 2017-01-04T03:42:18.170 に答える