如何将此 pl/sql 更改为函数?
Posted
技术标签:
【中文标题】如何将此 pl/sql 更改为函数?【英文标题】:How can I change this pl/sql to a function? 【发布时间】:2020-11-21 20:14:40 【问题描述】:我正在完成一本小册子中的练习,因为我刚刚在 Oracle 中学习 PL/SQL,它希望我把它变成一个函数,我不知道我怎么能,因为它不是一个存储过程,至少我不知道'认为它是,并且没有要进行的计算......有什么想法我应该做什么?
DECLARE
my_stdate LEASE.STDATE%TYPE;
my_enddate LEASE.ENDDATE%TYPE;
my_property_no LEASE.PROPERTY_NO%TYPE;
BEGIN
SELECT stdate, enddate, property_no
INTO my_stdate, my_enddate, my_property_no
FROM lease
WHERE lease_no = '&enter_lease_no';
DBMS_OUTPUT.PUT_LINE('Property '||my_property_no||' was leased from '||my_stdate||' and '||my_enddate);
END;
/
【问题讨论】:
【参考方案1】:替换变量 &enter_lease_no
是输入,DBMS_OUTPUT.PUT_LINE(...)
是 PL/SQL 匿名块的输出。
要使其成为函数,请将租约号作为参数(而不是替换变量)传入,并返回要输出的字符串值。
CREATE FUNCTION test_function(
enter_lease_no IN LEASE.LEASE_NO%TYPE
) RETURN VARCHAR2
IS
my_stdate LEASE.STDATE%TYPE;
my_enddate LEASE.ENDDATE%TYPE;
my_property_no LEASE.PROPERTY_NO%TYPE;
BEGIN
SELECT stdate, enddate, property_no
INTO my_stdate, my_enddate, my_property_no
FROM lease
WHERE lease_no = enter_lease_no;
RETURN 'Property '||my_property_no||' was leased from '||my_stdate||' and '||my_enddate;
END;
/
然后可以使用:
BEGIN
DBMS_OUTPUT.PUT_LINE( test_function( '&enter_lease_no' ) );
END;
/
【讨论】:
我认为值得指出的是,该函数也可以用于直接 SQL 查询:SELECT TEST_FUNCTION('&enter_lease_no') from dual。 (以免初学者认为您的示例是调用函数的唯一方法)。还值得指出的是,在任一示例中,对函数的调用仍取决于替换变量作为输入,并且 1)该替换变量是 sqlplus 构造,以及 2)还有其他提供该值的方法。所有,只是为了让 OP 明白,除了这些简单的示例之外,还有更多使用函数的方法。 :-)以上是关于如何将此 pl/sql 更改为函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在选择语句的“NOT IN”子句中使用逗号分隔的字符串列表作为 pl/sql 存储的函数参数
如何在返回 SELF 的 pl/sql 对象类型的函数中链接调用
如何根据 PL/SQL 变量值检查输入参数值是不是存在作为列表?
PL/SQL 函数中的 XmlRoot、XmlElement、InsertChildXml 给出 PLS-00201 必须声明标识符