Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle9i中的动态声明/查询_Sql_Oracle_Ora 00932 - Fatal编程技术网

Sql oracle9i中的动态声明/查询

Sql oracle9i中的动态声明/查询,sql,oracle,ora-00932,Sql,Oracle,Ora 00932,在Oracle中,给定一个表名列表,我希望对大量表执行“select column1 into var1 from table”语句。我想对表中的所有列执行此操作。在带有user\u tab\u列的查询返回该列的类型之前,我无法声明var1的类型。我试图将var1声明为sys.anytype,但得到了ORA-00932,并显示错误消息,如“不一致的数据类型:预期的字符得到字符” 那么,我如何克服这个错误,或者如何动态声明一个变量呢?非常感谢。大多数数据类型将隐式转换为VARCHAR。当然也有例外

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


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

大多数数据类型将隐式转换为VARCHAR。当然也有例外,但如果您的表只是VARCHAR、dates和numbers,那么您应该不会有问题。

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

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

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;

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

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;