를 저장하는 방법 선택의 결과 변수에서 오라클 절차
-
20-09-2019 - |
문제
쓰고 간단한 절차를 따릅니다.내장 선택한 결과에서는 변수입니다.내가 사용하는"선택으로"그러나 나는 쿼리할 수 있지 않습니다.
예제:
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;
또는, 당신은 a를 만들 수 있습니다 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;
이 샘플을 Oracle에서 시도하지 않았으므로 컴파일러 오류가 발생할 수 있습니다 ...
다른 팁
는 경우 귀하의 선택이 반환 하나 이상의 접속로그,쿠키,접속할 수 없을 선택 사용으로 synthax.
구축 할 필요가 루프를 통해 이동합 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;
제휴하지 않습니다 StackOverflow