2010-12-20 15 views
1

Oracleでは、表名のリストを指定して、大量の表の「select column1 into table1」を実行します。そして私はテーブルのすべての列に対してこれを実行したい。私は、user_tab_columnsを持つクエリが列の型を返すまで、var1の型を宣言することはできません。 var1をsys.anytypeとして宣言しようとしましたが、ORA-00932に "inconsistent datatypes:expected CHAR got 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、日付、および数値の場合、あなたはうまくいくはずです。