programing

PL/SQL의 열에 대해 반복

lastmoon 2023. 8. 5. 10:53
반응형

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

반응형