我已经尝试了一些答案,无法使我的代码工作: 这就是我想要的,这就是我所做的: 我有一个两列类型的表,我想使用函数查询该表,以返回完全相同的表,以路由到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
答案 0 :(得分:2)
您收到这些编译消息,因为您的代码中存在多个语法错误。 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;
/
答案 1 :(得分:0)
在return语句中尝试不带()并添加一个结尾;最后。
return temp_list;
end;
另外,您可能需要查看所谓的流水线函数: http://www.oracle-base.com/articles/misc/pipelined-table-functions.php