2017-01-04 2 views
-2

모두를 사용하여 열을 업데이트하려고합니다. update 문의 set 부분이 생성 된 다음 for 문으로 전달됩니다. 집합 부분에는 여러 개의 열이있을 수 있습니다. 그러나 '누락 된 등호'오류가 발생합니다. 이것을 해결하는 다른 방법은 없습니까?모두에 대해 복수 열 업데이트

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

그냥 평범한 것, 사람들이 대답합니다. 누군가가 당신의 질문에 대답 할 때 당신이 기대하는 것을 얻지 못하거나 와트가 어떻게되는지 모른다. 난 강력하게 당신이 링크를 thorugh로 이동하는 것이 좋습니다 http://stackoverflow.com/help/someone-answers – XING

+1

귀하의 UPDATE 문은 SQL로 작동하지 않을 것입니다, 그래서 당신은 왜 그것이 FORALL 문에서 작동 할 것이라고 기대합니까? 먼저 유효한 SQL을 작성한 다음 대량 작업으로 작동하도록 수정해야합니다. – APC

답변

1

사용한 구문이 인식되지 않습니다. 동적 SQL을 사용하여이를 수행 할 수 있습니다. 그러나 직원의 급여를 d에 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; 
/

을 당신이 받아들이거나 답변 할 때 투표하지 않는 본 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; 
/