oracle如何从函数中返回值表
Posted
技术标签:
【中文标题】oracle如何从函数中返回值表【英文标题】:How to return a table of values from a function in oracle 【发布时间】:2013-12-09 06:25:55 【问题描述】:我已经尝试了一些答案,但无法使我的代码工作: 这就是我想要的,这就是我所做的: 我有一个两列类型的表,我想使用函数查询该表以返回完全相同的表以路由到 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;
/
当我尝试编译此代码时,我收到以下错误: FUNCTION 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
【问题讨论】:
【参考方案1】:您收到这些编译消息是因为您的代码中有几个语法错误。 IS
的两个实例,缺少select
中的类型,return
中那些不必要的括号。你可以纠正这些,但你也应该简化你的代码。
填充嵌套表的最简单方法是使用批量收集。
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;
/
【讨论】:
如果这解决了您的问题,您应该接受它作为正确的解决方案。 Find out how【参考方案2】:在return语句中不带()试试,加个end;最后。
return temp_list;
end;
您可能还想看看所谓的流水线函数: http://www.oracle-base.com/articles/misc/pipelined-table-functions.php
【讨论】:
以上是关于oracle如何从函数中返回值表的主要内容,如果未能解决你的问题,请参考以下文章