2012-07-23 2 views
4
Set ServerOutput on size 100000; 
declare 
countTab number := 0; 
countCol number := 0; 
currDate varchar2(30); 
scale number := 0; 


Begin 

select count(*) into countCol from USER_TAB_COLUMNS where TABLE_NAME = 'EVAPP_INTERFACE' and COLUMN_NAME = 'TARGET_AMNT_LTV_NUM' and DATA_SCALE is null; 
IF (countCol <> 0) then 

DBMS_OUTPUT.put_line(' EVAPP_INTERFACE.TARGET_AMNT_LTV_NUM values begin'); 
execute immediate 'select APPSEQNO, TARGET_AMNT_LTV_NUM from evapp_interface where TARGET_AMNT_LTV_NUM > 999999999999'; 

END IF; 
END; 
\ 

선택 쿼리의 결과를 표시하려고합니다. 내가 선택한 문을 그대로 실행 해 보았지만 언급 된 열을 찾을 수 없다는 예외를 제공합니다. 그래서 열의 테이블 이름을 넣으려고했는데 INTO을 사용할 필요가 있다고 불평했습니다.뿐만 아니라 그 구문도 마음에 들지 않았습니다. 당신은 커서를 열 필요 것, 가져 오기 당신의 SQL * Plus 사용하는 가정Select 문의 Pl/SQL 표시 결과

+0

이고 DATA_SCALE이 null입니까? 테이블의 열 USER_TAB_COLUMNS – Nathan

+1

@ Nathan - [예.] (http://docs.oracle.com/cd/E14072_01/server.112/e10820/statviews_5459.htm); '숫자의 소수점 이하 자릿수'. –

답변

3

은 가장 간단한 옵션은 PL/SQL의 결과를 표시하려면

Set ServerOutput on size 100000; 
variable rc refcursor; 
declare 
    countTab number := 0; 
    countCol number := 0; 
    currDate varchar2(30); 
    scale number := 0; 
Begin 
    select count(*) 
    into countCol 
    from USER_TAB_COLUMNS 
    where TABLE_NAME = 'EVAPP_INTERFACE' 
    and COLUMN_NAME = 'TARGET_AMNT_LTV_NUM' 
    and DATA_SCALE is null; 
    IF (countCol <> 0) then 
    DBMS_OUTPUT.put_line(' EVAPP_INTERFACE.TARGET_AMNT_LTV_NUM values begin'); 
    open :rc 
    FOR 'select APPSEQNO, TARGET_AMNT_LTV_NUM ' || 
     ' from evapp_interface ' || 
     ' where TARGET_AMNT_LTV_NUM > 999999999999'; 
    END IF; 
END; 
/

PRINT rc; 

그런 짓을하는 아마 결과를 로컬 변수에 저장 한 다음 DBMS_OUTPUT에 쓰기와 같은 로컬 변수를 사용하여 작업하십시오.

+0

다른 열을 확인할 다른 sql 블록이있는 경우 다른 커서를 사용합니까? 또는 동일한 것을 사용하고 결국 모든 것을 인쇄 할 수 있습니까? – roymustang86

+0

@ roymustang86 - 나는 그 질문을 이해하고 있는지 확신 할 수 없다. ?서는 조회에 대한 포인터입니다. 여러 개의 동적 쿼리를 실행해야하며 익명의 PL/SQL 블록을 많이 실행 한 후에 각 쿼리의 결과를 인쇄하려면 SQL * Plus에서 여러 개의 'refcursor' 변수를 선언해야합니다 . 익명 블록을 실행하고, 결과를 출력하고, 다른 익명 블록을 실행하고, 결과를 출력하는 등의 작업을 수행하는 경우 SQL * Plus에서 단일 refcursor 변수를 사용할 수 있습니다. –

+0

나는 당신이 말한대로했는데, 8 개의 커서가 지나면 커서가 닫힌다는 오류가 발생합니다. 또한 오라클은 스크립트가 끝날 때 커서를 닫아야합니까? – roymustang86