从选择返回值到函数
Posted
技术标签:
【中文标题】从选择返回值到函数【英文标题】:Return value from select into Function 【发布时间】:2018-02-06 10:51:00 【问题描述】:我想编写从选择返回值的函数:
Function Test
IS
my_select varchar2(200):='select colA from tableA where colB = '||const||'';
BEGIN
return my_select;
END;
它将选择作为字符串返回。我应该使用“into”吗?
或者也许可以做类似的事情:
..
return 'select colA from tableA where colB = '||const||'';
..
【问题讨论】:
听起来你可能想要一个引用光标。 【参考方案1】:由于您正在使用Oracle 12c
,您可以在Procedure
和WITH
子句中使用RETURN_RESULT
等新功能,并使用function
。见下文:
使用Procedure
:
CREATE OR REPLACE PROCEDURE Test (p_value in varchar2)
AS
job_cursor SYS_REFCURSOR;
BEGIN
OPEN job_cursor FOR
select colA from tableA where colB = p_value;
DBMS_SQL.RETURN_RESULT(job_cursor);
END;
在With
子句中使用函数:
WITH
Function Test (p_value in varchar2) return sys_refcursor
IS
ret_cur sys_refcursor;
BEGIN
Open ret_cur for select colA from tableA where colB = p_value;
return ret_cur;
END ;
SELECT Test ('ABC') ---passing Input to function
FROM DUAL;
【讨论】:
还有一个@XING - 如果程序在包内并且“p_value”被声明为全局常量,如何使用它? @4est ..对不起,我不明白你想做什么。也许您可以发布一个包含您正在尝试做的所有事情的问题。 如果在包体的某个地方我得到了这样的结果:p_value CONSTANT varchar2(30) := 'city2'....所以我不想传递 p_value 但使用我的 CONSTANT @4est 所以在这种情况下你可以把它写成PROCEDURE Test (p_value in varchar2 DEFAULT 'city2'
。您不能使用相同的名称 p_value
进行输入。或者你可以把它写成PROCEDURE Test (p1_value in varchar2 DEFAULT p_value
【参考方案2】:
我会使用引用光标来执行此操作,如下所示:
Function Test (p_value in varchar2)
return sys_refcursor
IS
ret_cur sys_refcursor;
BEGIN
Open ret_cur for select colA from tableA where colB = p_value;
return ret_cur;
END test;
请注意,在您的情况下不需要动态 sql;你可以简单地绑定值。
【讨论】:
【参考方案3】:也许下面的这个例子可以告诉你如何解决它。 我更喜欢使用游标和记录。
CREATE OR REPLACE Test (vColB IN TableA.ColB%TYPE)
RETURN TableA.ColA%TYPE
AS
CURSOR cTableA IS
SELECT ColA FROM TableA WHERE ColB = vColB;
rTableA cTableA%ROWTYPE;
BEGIN
OPEN cTableA;
FETCH cTableA INTO rTableA;
CLOSE cTableA;
RETURN rTableA.ColA;
END;
/
【讨论】:
以上是关于从选择返回值到函数的主要内容,如果未能解决你的问题,请参考以下文章