Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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中的函数返回值表_Oracle_Function_Plsql_User Defined Types - Fatal编程技术网

如何从oracle中的函数返回值表

如何从oracle中的函数返回值表,oracle,function,plsql,user-defined-types,Oracle,Function,Plsql,User Defined Types,我尝试了一些答案,但无法使我的代码正常工作: 这是我想要的,这是我做的: 我有一个两列类型的表,我想使用一个函数查询该表,以返回要路由到VB.NET的完全相同的表,以便在DatagridView控件中显示它。 我是PL/SQL的新手,这对我来说是个问题。 我打算解决的第一个问题是创建函数 -- DECLARE A RECORD TYPE create or replace type shipper_type AS OBJECT ( shipper_id number, shipper_name

我尝试了一些答案,但无法使我的代码正常工作: 这是我想要的,这是我做的: 我有一个两列类型的表,我想使用一个函数查询该表,以返回要路由到VB.NET的完全相同的表,以便在DatagridView控件中显示它。 我是PL/SQL的新手,这对我来说是个问题。 我打算解决的第一个问题是创建函数

-- DECLARE A RECORD TYPE
create or replace type shipper_type AS OBJECT
(
shipper_id number,  shipper_name varchar2(7)
);
/

CREATE TYPE t_shipper as table of shipper_type;
/

    create or replace function get_shipper return t_shipper is 
    temp_list t_shipper:= t_shipper();
    is  
     --  shipper_record shipper_type;
    begin
      for i in (  (select shipper.shipper_id, shipper.shipper_name) list from shipper) 
      loop
        temp_list.extend;
      temp_list(temp_list.last):= t_shipper(list);   
    end loop;

    return(temp_list);
   end get_shipper;
   /
当我试图编译这段代码时,我得到了以下错误: 函数GET_SHIPPER的错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
3/1      PLS-00103: Encountered the symbol "IS" when expecting one of the
         following:
         begin function pragma procedure subtype type <an identifier>
         <a double-quoted delimited-identifier> current cursor delete
         exists prior

6/63     PLS-00103: Encountered the symbol ")" when expecting one of the
         following:
         . ( , * @ % & - + / at mod remainder rem <an identifier>
         <a double-quoted delimited-identifier> <an exponent (**)> as
         from || multiset
行/列错误
-------- -----------------------------------------------------------------
3/1 PLS-00103:在预期一个
以下:
begin函数pragma过程子类型类型
当前光标删除
先于
6/63 PLS-00103:在期待一个
以下:
. (,*@%&-+/mod rem
作为
从| |多集
在return语句中不使用()进行尝试,并在末尾添加end

return temp_list; 

end;
此外,您可能还想看看所谓的流水线函数:
您收到这些编译消息是因为您的代码中存在多个语法错误。
的两个实例是
,缺少
选择
中的类型,
中那些不必要的括号返回
。您可以更正这些错误,但也应该简化代码

填充嵌套表的最简单方法是使用批量收集

create or replace function get_shipper return t_shipper is 
    temp_list t_shipper:= t_shipper();
begin
    select shipper_type(shipper.shipper_id, shipper.shipper_name) 
    bulk collect into temp_list
    from shipper;

    return temp_list ;
end get_shipper;
/

如果这解决了你的问题,你应该接受它作为正确的解决方案。