-2

我正在尝试使用 for all 更新列。更新语句的 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 回答