반응형
Oracle procedure에서 선택 결과를 변수에 저장하는 방법
간단한 절차서를 씁니다.선택 결과를 변수에 저장하려고 합니다."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 Synthax를 사용할 수 없습니다.
결과 집합을 탐색하려면 루프를 구축해야 합니다.
Adam은 명시적 커서와 대량 수집 루프를 사용하는 방법을 설명했습니다.가능한 가장 간단한 루프를 구축하는 방법을 보여드리겠습니다(묵시적 커서, DELECORE 섹션 필요 없음).
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;
언급URL : https://stackoverflow.com/questions/1347091/how-to-store-selection-result-in-to-variable-in-oracle-procedure
반응형
'programing' 카테고리의 다른 글
뷰 컨트롤러를 다른 뷰 컨트롤러의 하위 뷰로 추가 (0) | 2023.10.14 |
---|---|
이전 달을 계산하는 MySQL 쿼리 (0) | 2023.10.14 |
가로 세로에서 소프트 키보드 입력에 대해 전체 화면 편집 보기를 비활성화하시겠습니까? (0) | 2023.10.14 |
최대 절전 모드 둘 다 복합 기본 키가 있는 경우 관련 없는 두 테이블에 가입 (0) | 2023.10.14 |
안드로이드:영상 보기에서 영상을 각도만큼 회전 (0) | 2023.10.14 |