1

Oracleでは、テーブル名のリストを指定して、大量のテーブルに対して「select column1 intovar1fromtable」ステートメントを実行したいと思います。そして、テーブルのすべての列に対してこれを実行したいと思います。user_tab_columnsを使用したクエリが列のタイプを返すまで、var1のタイプを宣言できません。var1をsys.anytypeとして宣言しようとしましたが、「データ型の整合性がありません:予期されたCHARがCHARを取得しました」などのエラーメッセージが表示されたORA-00932を取得しました。

では、どうすればこのエラーを回避できますか、またはどのように変数を動的に宣言できますか?どうもありがとう。

4

2 に答える 2

1

ほとんどのデータ型は暗黙的にVARCHARに変換されます。明らかに例外はありますが、テーブルがvarchars、dates、numbersだけの場合は、問題ないはずです。

于 2010-12-20T17:36:26.893 に答える
0

クレイグは正しいです。おそらく、任意のタイプのVARCHAR2インスタッドとして宣言する必要があります。

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;
于 2010-12-20T17:43:44.520 に答える