【问题标题】:dynamic declaration/query in oracle 9ioracle 9i 中的动态声明/查询
【发布时间】:2010-12-20 17:10:21
【问题描述】:

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

那么我怎样才能克服这个错误,或者我怎样才能动态声明一个变量呢?非常感谢。

【问题讨论】:

    标签: sql oracle ora-00932


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      Craig 是对的,您可能应该将其声明为任何类型的 VARCHAR2。

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多