2011-04-24 3 views
3

기본적으로 커서에 날짜 값을 전달하고 각 행에 대해 전체 행/레코드를 인쇄하고 싶습니다. a) BEGIN 섹션에서 날짜가 제대로 변환되는지, b) 각 행을 인쇄 할 때 'PUT_LINE'호출에서 잘못된 숫자 나 인수 유형이 나타납니다.plsql에서 커서에 날짜 값을 전달하려면 어떻게합니까?

DEFINE B_HIREDATE = 11-OCT-88 

DECLARE 
    cursor DATE_CUR (the_date DATE) is 
    select * from employees 
     where hire_date > to_date(the_date, 'dd-mon-yy') 
     order by hire_date; 

    r_emp DATE_CUR%ROWTYPE; 

BEGIN 
    for r_emp IN DATE_CUR('&B_HIREDATE') LOOP 
    dbms_output.put_line(r_emp); 
    end LOOP; 
END; 
/

가 내가 알고있는 하나의 필드 이름에 내 선택 문을 변경하는 경우에도, 어떠한 출력 값을 받고하지 오전 :

이것은 내가 지금까지있는 것입니다.

답변

3

불행히도 DBMS_OUTPUT 콜에서 전체 행을 인쇄 할 수는 없습니다. 커서로 반환 된 각 열을 개별적으로 인쇄해야합니다. PUT_LINEexpects a VARCHAR2 argument 또는 암시 적으로 변환 될 수있는 항목 여러 값을 하나의 호출로 연결할 수 있습니다. 좋은 포맷팅은 쉽지 않습니다.

날짜 변환은 거의 정상이지만 커서 매개 변수에 DATE이 필요하므로 커서 호출에 TO_DATE이 있어야합니다. 날짜 마스크에 YY 대신 RR을 사용하거나, 바람직하게는 4 자리 연도를 사용하고 마스크 YYYY을 사용해야합니다.

SET SERVEROUTPUT ON 
DEFINE B_HIREDATE = 11-OCT-1988 

DECLARE 
    cursor DATE_CUR (the_date DATE) is 
    select * from employees 
     where hire_date > the_date 
     order by hire_date;  
BEGIN 
    for r_emp IN DATE_CUR(TO_DATE('&B_HIREDATE','DD-MON-YYYY')) LOOP 
    dbms_output.put_line(r_emp.hire_date); 
    end LOOP; 
END; 

명시 적으로이 커서 구문 변수로서 r_emp를 선언 할 필요가 없습니다 (하지만 당신은 OPEN/FETCH/CLOSE 버전에서와).

SQL * Plus에서이 항목을 실행하는 경우 DBMS_OUTPUT 호출을 표시하려면 시작 부분에 SET SERVEROUTPUT ON을 추가해야합니다. SQL Developer에서도이 작업을 수행 할 수 있으며 워크 시트에 대해 활성화해야하는 출력을 볼 수있는 별도의 창이 있습니다.

관련 문제