我正在尝试更新所有列。构造更新语句的 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;
无法
识别您使用的语法。您可以使用动态 SQL 来执行此操作。但是,我不明白你为什么要在SALARY=EMPLOYEE_ID
将薪水设置为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;
/