간단한 절차를 씁니다. 선택 결과를 변수에 저장하려고합니다. "SELECT INTO"쿼리를 사용하지만이 작업을 수행 할 수 없습니다.오라클에서 선택 결과를 변수에 저장하는 방법
예 :
DECLARE
v_employeeRecord employee%ROWTYPE;
BEGIN
SELECT * INTO v_employeeRecord
FROM Employee WHERE Salary > 10;
END;
간단한 절차를 씁니다. 선택 결과를 변수에 저장하려고합니다. "SELECT INTO"쿼리를 사용하지만이 작업을 수행 할 수 없습니다.오라클에서 선택 결과를 변수에 저장하는 방법
예 :
DECLARE
v_employeeRecord employee%ROWTYPE;
BEGIN
SELECT * INTO v_employeeRecord
FROM Employee WHERE Salary > 10;
END;
당신은 몇 가지 옵션이 있습니다.
DECLARE
CURSOR v_employeeRecords IS
SELECT * FROM Employee WHERE Salary > 10;
v_employeeRecord employee%ROWTYPE;
BEGIN
FOR v_employeeRecord IN v_employeeRecords LOOP
/* Do something with v_employeeRecord */
END LOOP;
END;
을 또는 당신이 TABLE
변수를 만들 수 있습니다 : 당신은 커서로 해당 쿼리를 돌 수 있었다
DECLARE
v_employeeRecord employee%ROWTYPE;
v_employeeRecords IS TABLE OF employee%ROWTYPE;
i BINARY_INTEGER;
BEGIN
SELECT * BULK COLLECT INTO v_employeeRecords
FROM Employee WHERE Salary > 10;
i := v_employeeRecords.FIRST;
WHILE v_employeeRecords.EXISTS(i) LOOP
v_employeeRecord := v_employeeRecords(i);
/* Do something with v_employeeRecord */
i := v_employeeRecords.NEXT(i);
END;
END;
내가 오라클에서 이러한 샘플을 시도하지 않은, 그래서 당신은 컴파일러 오류가 발생할 수 있습니다 ..
SELECT가 두 개 이상의 행을 반환하면 SELECT INTO 신택스를 사용할 수 없습니다.
당신은 resulte 세트를 탐색 루프를 구축해야합니다
Adam 당신이 명시 적 커서를 사용하는 것이 방법을 설명하고 대량 루프를 수집합니다. 난 당신이 간단한 루프가 가능 (암시 적 커서를 선언 섹션이 필요하지 않습니다) 구축 할 수 방법을 보여줍니다 :
BEGIN
FOR c_emp IN (SELECT *
FROM Employee
WHERE Salary > 10) LOOP
/* do something with each row, for example:*/
UPDATE foo SET bar = bar + c_emp.salary WHERE id = c_emp.id;
END LOOP;
END;
좋은 예, 감사합니다. –
는 간단한 예를 들어 당신이 얻을 메시지 오류를 제공 할 수 있습니까? –
하나의 행만 저장할 수 있지만 선택 결과에는 많은 행이 포함됩니다. –