2010-12-20 1 views
1

의 동적 선언/쿼리 Oracle에서 테이블 이름의 목록이 주어지면 대량의 테이블에 대해 'select column1 into table1'문을 수행하려고합니다. 테이블의 모든 열에 대해이 작업을 수행하려고합니다. user_tab_columns가있는 쿼리가 열 유형을 반환 할 때까지 var1의 유형을 선언 할 수 없습니다. var1을 sys.anytype으로 선언하려했지만 ORA-00932에 "inconsistent datatypes : expected CHAR CHAR"와 같은 오류 메시지가 나타납니다.oracle 9i

그래서이 오류를 어떻게 피할 수 있습니까? 또는 어떻게 변수를 동적으로 선언 할 수 있습니까? 많은 감사합니다.

답변

0

Craig는 아마 anytype의 VARCHAR2 instad로 선언해야합니다.

This article 제프 헌터 (Jeff Hunter)는 데이터를 변환 할 수없는 경우에도 쉽게 변수를 채울 수있는 좋은 기능을 제공합니다.

CREATE OR REPLACE FUNCTION getData(data IN SYS.ANYDATA) 
    RETURN VARCHAR2 
    AS 
     l_varchar2 VARCHAR2(4000); 
     l_rc   NUMBER; 
    BEGIN 

     CASE data.getTypeName 
     when 'SYS.NUMBER' then 
      l_rc := data.getNumber(l_varchar2); 
     when 'SYS.DATE' then 
      l_rc := data.getDate(l_varchar2); 
     when 'SYS.VARCHAR2' then 
      l_rc := data.getVarchar2(l_varchar2); 
     else 
      l_varchar2 := '** unknown **'; 
     END CASE; 

     RETURN l_varchar2; 

    END; 
1

대부분의 데이터 유형은 내재적으로 VARCHAR로 변환됩니다. 분명히 예외가 있지만 테이블이 varchars, 날짜 및 숫자 일 경우에는 괜찮을 것입니다.