我正在使用Oracle 12c和Oracle SQL Developer创建一个包。我的意图是将一个值从SQL语句传递给包,如SELECT * FROM table(test2.get_ups(0));
。我想返回一个表,如在IDE中执行SQL SELECT语句。如何从函数返回表格?
这是我的包装。当我尝试编译我收到以下错误:
PLS-00103: Encountered the symbol "FOR" when expecting one of the following: begin function pragma procedure subtype type <an identifier> <a double-quoted delimited-identifier> current cursor delete exists prior The symbol "begin" was substituted for "FOR" to continue.
我该如何解决这个问题?
这里是包:
CREATE OR REPLACE PACKAGE test2 AS
TYPE measure_record IS RECORD(
x_start VARCHAR2(50),
x_end VARCHAR2(50),
trip_count NUMBER);
TYPE measure_table IS TABLE OF measure_record;
FUNCTION get_ups(x number)
RETURN measure_table
PIPELINED;
END;
/
CREATE OR REPLACE PACKAGE BODY test2 AS
FUNCTION get_ups(x number) RETURN measure_table
PIPELINED as
cursor temp_cur is
SELECT x1, x2, count(*) FROM t1 WHERE x1 = x;
for cur_rec in temp_cur
loop
pipe row(cur_rec);
end loop;
RETURN;
END get_ups;
END;
总的来说,我同意。游标被参数化,所以它看起来应该稍微有点不同,对吧?就像'cursor temp_cur(x NUMBER)是'... –
@PatrickBacon游标可以引用函数参数,'X'不需要通过游标参数传入。 –
@WernfriedDomscheit 12.2不适用于我。据我所知,PL/SQL记录类型没有默认的构造函数,必须逐个组装。如果记录和表类型被定义为SQL类型,那么它应该工作。 –