Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Oracle 具有基于行类型的集合的ANYDATA_Oracle_Generics_Plsql - Fatal编程技术网

Oracle 具有基于行类型的集合的ANYDATA

Oracle 具有基于行类型的集合的ANYDATA,oracle,generics,plsql,Oracle,Generics,Plsql,我刚刚发现了Oracle的ANYDATA和ANYTYPE,并认为对我拥有的一些非常重复的代码进行泛化是有用的。我尝试了一个非常简单的代码示例,如下所示: declare --simple test query cursor myCurs is select sysdate from dual; type t_arr is table of myCurs%rowtype; v_arr t_arr; v_anydata ANYDATA;

我刚刚发现了Oracle的
ANYDATA
ANYTYPE
,并认为对我拥有的一些非常重复的代码进行泛化是有用的。我尝试了一个非常简单的代码示例,如下所示:

declare
    --simple test query
    cursor myCurs is
        select sysdate from dual;

    type t_arr is table of myCurs%rowtype;
    v_arr t_arr;

    v_anydata ANYDATA;    
begin

    open myCurs;
    fetch myCurs bulk collect into v_arr;
    close myCurs;

    dbms_output.put_line(v_arr.count || ' records');

    v_anydata := ANYDATA.convertCollection(v_arr);
    dbms_output.put_line(anydata.gettypename(v_anydata));

end;
/
运行此代码时会出现错误“ORA-22370:方法ORA-22370的使用不正确方法ConvertCollection的使用不正确”(是的,它实际上会重复
ORA-22370

我的问题是:是否可以在行类型集合上使用任何数据?我问这个问题是因为我看到的所有关于集合的ANYDATA(到目前为止)的示例都使用对象类型,没有一个使用行类型,但我还没有看到任何(到目前为止)明确表示不能使用行类型的示例

我的目标是清理一些重复性很强的批量收集/插入代码,这些代码一遍又一遍地执行相同的操作,但不同的表使用不同的游标


(Oracle 10g)

任何数据都可以使用SQL数据类型,即可以用来定义表列的任何数据

%行类型是PL/SQL构造,因此SQL引擎无法识别。如果您考虑%ROWTYPE的动态特性,您将能够找出原因



想要清除重复代码是一个高尚的想法。我以前在SQL类型中实现过一个ETL处理器,它使用一个超类型对象来拥有泛型处理,并使用子类型来执行特定于表的代码(例如插入)。这些子类型是完全可生成的:不像动态%ROWTYPE实现那样灵活,但仍然很容易

所以我在这个例子中试图做的是不可能的?亲爱的APC,我希望在这里请您看看我关于Pl/SQL中泛型的新问题不是一个坏主意:。从你对这个问题的回答来看,我想你会很有帮助的。