PL/SQL의 열에 대해 반복
엠프랑 엠프 테이블이 있어요아이디, 엠프네임, 샐러리 그리고 저는 직원별로 계산을 하려고 합니다.하지만 계산을 하기 위해 각 EMP를 반복하는 데 문제가 있습니다.하지만 명시적 커서는 사용할 수 없습니다.
그래서 지금은 그저 엠프의 목록을 작성하려고 합니다.ID:
Declare
aRows Number;
eid emp_ID%TYPE;
Begin
Select Count(*)
Into aRows
from emp;
Select emp_ID
Into eid
From emp;
FOR days IN 1..Tot_Rows
Loop
Dbms_Output.Put_Line(eid);
eid := eid + 1;
End Loop;
END;
그러나 다음 오류가 발생했습니다: PLS-00320: 이 식 형식의 선언이 불완전하거나 잘못된 형식입니다.
PL/SQL에서 테이블의 행을 반복하는 가장 간단한 방법은 다음과 같은 작업을 수행하는 것입니다.
BEGIN
FOR employees IN (SELECT emp_id FROM emp)
LOOP
dbms_output.put_line( employees.emp_id );
END LOOP;
END;
또는 이 예제에서와 같이 모든 EID 값을 PL/SQL 컬렉션으로 가져오고 컬렉션을 통해 반복할 수 있습니다.
DECLARE
TYPE emp_id_tbl IS TABLE OF emp.emp_id%type;
l_emp_ids emp_id_tbl ;
BEGIN
SELECT emp_id
BULK COLLECT INTO l_emp_ids
FROM emp;
FOR i IN l_emp_ids .FIRST .. l_empnos.LAST
LOOP
dbms_output.put_line( l_emp_ids (i) );
END LOOP;
END;
그러나 쿼리가 수천 개의 행을 반환할 수 있는 경우 모든 데이터를 컬렉션으로 가져오면 원하는 것보다 더 많은 PGA 메모리를 사용할 수 있으며 LIMIT 절을 사용하여 행을 청크로 가져와야 할 수 있습니다.하지만 이 시점에서 그것은 우리보다 앞서가는 것처럼 보일 것입니다.
Justin Cave는 그 방법을 설명했지만, 구체적으로 당신이 받은 오류를 살펴보면, 그것은 다음과 같습니다.
eid emp_ID%TYPE;
사용 시%TYPE
테이블 이름과 열 이름을 지정해야 합니다.
eid emp.emp_ID%TYPE;
행에 있는 모든 열을 선택하는 경우에도 확인할 수 있습니다.%ROWTYPE
.
당신의 접근 방식은 또한 두 가지 가정을 하고 있었습니다: 첫 번째 선택은 다음과 같습니다.eid
가장 낮은 ID를 찾았는데, 이는 결코 보장되지 않으며, 이후의 모든 ID 값이 순차적입니다.그리고 당신은 선언을 하고 그들을 불러모으고 있습니다.aRows
하지만 언급하자면.Tot_Rows
.
언급URL : https://stackoverflow.com/questions/4729838/iterate-over-a-column-in-pl-sql
'programing' 카테고리의 다른 글
적합한 메인 클래스를 찾을 수 없습니다. 'mainClass' 속성인 Springboot을 추가하십시오. (0) | 2023.08.05 |
---|---|
powershell 스크립트 내에서 powershell 스크립트 실행, python이 실행 중에 powershell 출력을 인쇄하도록 하는 방법 (0) | 2023.08.05 |
HTML 목록 유형 대시 (0) | 2023.08.05 |
다중 경로 값을 사용하는 ASP.NET MVC URL 라우팅 (0) | 2023.08.05 |
개발자 도구를 사용하여 웹킷 입력 자리 표시자 검사 (0) | 2023.08.05 |