【问题标题】:How can I change this pl/sql to a function?如何将此 pl/sql 更改为函数?
【发布时间】: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;
/

【问题讨论】:

    标签: oracle function plsql


    【解决方案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 明白,除了这些简单的示例之外,还有更多使用函数的方法。 :-)
    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 2019-02-06
    • 2011-08-08
    • 1970-01-01
    • 2023-03-24
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多