【发布时间】:2010-07-14 03:54:38
【问题描述】:
我有一个如下示例查询:
INSERT INTO my_gtt_1 (fname, lname) (select fname, lname from users)
为了摆脱临时表,我创建了一个包:
create or replace package fname_lname AS
Type fname_lname_rec_type is record (
fname varchar(10),
lname varchar(10)
);
fname_lname_rec fname_lname_rec_type
Type fname_lname_tbl_type is table of fname_lname_rec_type;
function fname_lname_func
(
v_fnam in varchar2,
v_lname in varchar2
)return fname_lname_tbl_type pipelined;
刚接触 oracle...创建这个包需要很长时间。但现在我不知道如何摆脱my_gtt_1
怎么说呢……
INSERT INTO <newly created package> (select fnma, name from users)
【问题讨论】:
-
你现在是如何使用临时表的,为什么要去掉它?在这个非常简单的情况下,您可能会更好地使用视图,但这可能并不总是合适的。但我不确定这个包是否能满足你的要求——正如 APC 所说,你只能在使用它时传入一组值。您目前也没有对传递的值做任何事情。听起来您希望该函数对用户表执行查询并返回一个保存结果的 PL/SQL 表,而不是拥有一个 SQL 临时表。
-
你也应该看看这个,它比我解释得更好:stackoverflow.com/questions/2918466
标签: oracle plsql packages pipelined-function