oracle 9i中的动态声明/查询

时间:2010-12-20 17:10:21

标签: sql oracle ora-00932

在Oracle中,给定一个表名列表,我想在大量表上执行'select column1 into var1 from table'语句。我想对表的所有列执行此操作。在使用user_tab_columns的查询返回列的类型之前,我无法声明var1的类型。我试图将var1声明为sys.anytype但是得到了ORA-00932,并显示错误消息,例如“不一致的数据类型:预期CHAR得到CHAR”。

那么我怎样才能解决这个错误或者如何动态声明变量呢?非常感谢。

2 个答案:

答案 0 :(得分:1)

大多数数据类型将隐式转换为VARCHAR。显然有例外,但如果你的表只是varchars,日期和数字,那么你应该没问题。

答案 1 :(得分:0)

Craig是对的你应该将它声明为任何类型的VARCHAR2 instad。

Jeff Hunter的

This article有一个很好的功能,可以很容易地填充你的变量,如果你的数据无法转换就不会破坏。

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;