我正在尝试使用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;
答案 0 :(得分:1)
无法识别您使用的语法。您可以使用动态SQL来执行此操作。但是,我没有看到为什么您在SALARY=EMPLOYEE_ID
中将薪水设置为employee_i d。请检查你的逻辑。
使用动态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;
/