use*_*398 2 oracle plsql stored-procedures function oracle10g
我们可以在程序里面调用函数,但是可以在函数内部调用程序吗?我试过但我不能在函数内部调用程序.你能告诉我为什么我们不能调用函数内的程序吗?
"我试过但我不能在函数内调用程序."
你是怎么试的?你尝试了什么?你以什么方式失败了?
因为允许在函数内部调用过程.因此,如果它不适合您,那么您的代码中的原因是错误的.如果没有提供比现在更多的信息,我们无法诊断出来.
最可能的两个原因是:
您的代码中存在语法错误,导致其无法编译,或者其他一些错误导致运行时异常.
该函数可能在过程的范围内,但反之亦然.
当我们在查询中调用函数(例如发出DML)并且您在SELECT语句中调用函数时,您的过程正在执行一些不允许的操作.
我将在这里进行猜测,您首先声明了函数,其过程如下:
DECLARE
FUNCTION my_func RETURN NUMBER IS
BEGIN
RETURN 2;
END my_func;
PROCEDURE my_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE(my_func + 1);
END my_proc;
BEGIN -- main
my_proc;
END; -- main
Run Code Online (Sandbox Code Playgroud)
如上所示,在首先声明函数的情况下,您可以从过程中调用该函数。但是,如果尝试以下操作(在过程之前声明的函数,然后函数调用过程):
DECLARE
FUNCTION my_func RETURN NUMBER IS
BEGIN
my_proc;
RETURN 2;
END my_func;
PROCEDURE my_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE('22');
END my_proc;
BEGIN -- main
DBMS_OUTPUT.PUT_LINE(my_func);
END; -- main
Run Code Online (Sandbox Code Playgroud)
编译将失败,因为my_func无法“查看” my_proc。为了使其正常工作,您需要输入my_proc的“原型”声明,如下所示:
DECLARE
PROCEDURE my_proc;
FUNCTION my_func RETURN NUMBER IS
BEGIN
my_proc;
RETURN 2;
END my_func;
PROCEDURE my_proc IS
BEGIN
DBMS_OUTPUT.PUT_LINE('22');
END my_proc;
BEGIN -- main
DBMS_OUTPUT.PUT_LINE(my_func);
END; -- main
Run Code Online (Sandbox Code Playgroud)
分享并享受。