2012-04-05 4 views
1

동적 커서를 실행하여 결과를 반환하려고하는 중입니다.약식 참조 커서의 형식이 잘못되었습니다.

DECLARE 
    TYPE CUR_DATA IS REF CURSOR; 
    OUT_DATA CUR_DATA; 
    SQL_Statement  NVARCHAR2(8000); 
BEGIN 
    SQL_Statement := ' SELECT * FROM dual ';   
    OPEN OUT_DATA FOR SQL_Statement; 
END; 

은 왜 나에게 말하는 오류를 줄 않습니다 : 여기에 내가 뭘하려는거야의 예는 표현은 잘못된 유형입니까? 이 레퍼런스 커서는 약식 타입이 아닙니까? 도움!

답변

1

그것은 오라클 문서에서 언급 한 그 Select 문 지원 CHAR, VARCHAR2, 또는 CLOB (not NCHAR or NVARCHAR2). NVARCHAR으로 구현하려면 translate USING CHAR_CS 인수가 char을 데이터베이스 문자 집합으로 변환하는 유일한 해결책입니다. 출력 데이터 유형은 VARCHAR2입니다. NVARCHAR2이 필수가 아닌 경우

DECLARE 
    TYPE CUR_DATA IS REF CURSOR; 
    OUT_DATA CUR_DATA; 
    SQL_Statement  NVARCHAR2(4000); --declare this as VARCHAR2 
    SQL_Statement_var  VARCHAR2(4000); 
BEGIN 
    SQL_Statement := N'SELECT * FROM dual ';   
    SQL_Statement_var := TRANSLATE(SQL_Statement USING CHAR_CS); 
    OPEN OUT_DATA FOR SQL_Statement_var; 
END; 

No errors.

, 다음이 제공 기본 데이터 유형으로 만들어보십시오.

DECLARE 
    TYPE CUR_DATA IS REF CURSOR; 
    OUT_DATA CUR_DATA; 
    SQL_Statement  VARCHAR2(4000); --declare this as VARCHAR2 
BEGIN 
    SQL_Statement := ' SELECT * FROM dual ';   
    OPEN OUT_DATA FOR SQL_Statement; 
END; 

참고 : 나에게

Translate...USING

Open For Statement

+0

NVARCHAR2 또는 VARCHAR2 않아요 문제, 나는 둘 사이의 차이도 잘 모르는 것 같아요. 팁 고마워! 나는 그 벽에 머리를 대고 있었다. 1 – Adamantine

+0

@ Adamantine : 그렇다. varchar2를 사용하는 두 번째 접근법으로 간다. –

관련 문제