您可以从函数内部调用PL / SQL过程吗?
我还没有遇到实际的例子。因此,如果有人遇到这个例子,请分享。
答案 0 :(得分:1)
是的。您可以从任何其他pl / sql程序内部调用任何pl / sql程序。一个函数可以调用一个函数,一个过程可以调用一个调用函数的过程,一个函数可以调用TYPE BODY ...执行INSERT ..这会导致TRIGGER触发。
一个简单(不是很实际)的例子。
使用HR模式,其中有一个EMPLOYEES表,其中包含EMPLOYEE_ID,FIRST_NAME和LAST_NAME列。
我有一个接收INTEGER的函数,我们用它来查找EMPLOYEE记录。我们将它们的名字和姓氏合并在一起,然后以大写字母返回值。
但是,在执行此操作之前,我们将调用一个过程,该过程仅使用DBMS_LOCK包小睡了5秒钟。
代码:
create or replace procedure do_nothing_comments (x in integer, y in integer)
is
begin
null;
-- yeah, this is a dumb demo
dbms_lock.sleep(5);
end;
/
create or replace FUNCTION upper_name (
x IN INTEGER
) RETURN VARCHAR2 IS
upper_first_and_last VARCHAR2 (256);
BEGIN
SELECT upper (first_name)
|| ' '
|| upper (last_name)
INTO upper_first_and_last
FROM employees
WHERE employee_id = x;
do_nothing_comments (1, 2); -- here we are calling the procedure
RETURN upper_first_and_last;
END;
/
现在让我们调用该函数。
DECLARE
X NUMBER;
v_Return VARCHAR2(200);
BEGIN
X := 101;
v_Return := UPPER_NAME(
X => X
);
:v_Return := v_Return;
END;
/
我将在SQL Developer中使用Execute功能在打开功能的情况下执行此操作:
我得到了答案……只比实际需要的时间长5秒。
答案 1 :(得分:0)
您在这里:
create or replace function demo
return varchar2
as
begin
dbms_output.put_line('Hello');
return 1;
end demo;