在游标 where 子句和游标行类型中使用函数参数
Posted
技术标签:
【中文标题】在游标 where 子句和游标行类型中使用函数参数【英文标题】:Use parameter from function in cursor where clause and cursor rowtype 【发布时间】:2014-08-18 20:27:49 【问题描述】:我正在尝试创建一个接受值的 pl/sql 函数。游标在 where 子句中使用该值,并且该函数应返回游标的第一行。
这就是我想要开始的工作。
create or replace package pkg_test_slot as
cursor c_test_slotis
select * from (select person_uid, test.test, rownum r from test)
pivot(max(test) test_code for r in (1,2,3,4,5));
function f_test_getter (p_entity_uid number) return c_test_slot%rowtype;
end;
【问题讨论】:
【参考方案1】:像这样的
create or replace package body p_test is
function get_rows(pll_limit in number) return sys_refcursor is
lcur_rec sys_refcursor;
begin
open lcur_rec for
select rownum rw, dum
from (select 1 dum from dual group by cube(1, 2, 3, 4, 5))
where rownum < pll_limit;
return lcur_rec;
end get_rows;
procedure prc_get_data is
lcur sys_refcursor;
begin
lcur := get_rows(10);
end prc_get_data;
end p_test;
【讨论】:
【参考方案2】:您可以将F_TEST_GETTER
实现为:
CREATE OR REPLACE PACKAGE PKG_TEST_SLOT AS
CURSOR C_TEST_SLOT(pEUID IN NUMBER) IS
SELECT PERSON_UID, TEST.TEST, ROWNUM R
FROM TEST t
WHERE t.ENTITY_UID = pEUID;
FUNCTION F_TEST_GETTER (P_ENTITY_UID NUMBER)
RETURN PKG_TEST_SLOT.C_TEST_SLOT%ROWTYPE;
END PKT_TEST_SLOT;
CREATE OR REPLACE PACKAGE BODY PKG_TEST_SLOT AS
FUNCTION F_TEST_GETTER(P_ENTITY_UID NUMBER)
RETURN PKG_TEST_SLOT.C_TEST_SLOT%ROWTYPE
AS
aRow PKG_TEST_SLOT.C_TEST_SLOT%ROWTYPE;
BEGIN
OPEN C_TEST_SLOT(P_ENTITY_UID);
FETCH C_TEST_SLOT INTO aRow;
CLOSE C_TEST_SLOT;
RETURN aRow;
END PKG_TEST_SLOT;
END PKG_TEST_SLOT;
请注意,我稍微简化了 C_TEST_SLOT 的定义,添加了参数,并展示了它在函数中的使用方式。希望这能给你一些想法。分享和享受。
【讨论】:
以上是关于在游标 where 子句和游标行类型中使用函数参数的主要内容,如果未能解决你的问题,请参考以下文章