我们可以调用程序里面的函数,但是可以调用函数里面的程序吗? 我试过但我不能调用函数内的过程。 你能告诉我为什么我们不能调用函数内的过程吗?我们可以在PL/SQL中的一个函数里面调用程序吗?
回答
我的猜测是,你正在使用call proc
或exec proc
。请参阅下面的示例如何调用该过程。
CREATE OR REPLACE function f() return number as
BEGIN
your_proc;
another_proc_with_param(2, 'John');
return 0;
EXCEPTION when others then return -1;
END f;
但是,如果你的函数(或程序通过你的函数调用)做DML,你的功能不能在SQL语句中使用。(可在PLSQL块只使用)。
“我试过,但我不能调用函数中的过程。”
你怎么试?你尝试了什么?你以什么方式失败?
因为它被允许调用的函数内的程序。所以如果它不适合你,那么你的代码中的原因是错误的。如果没有您提供比目前更多的信息,我们无法诊断。
两个最可能的原因是:
你在你的代码中的语法错误这是防止它编译,或者是投掷运行时异常一些其它的错误。
的功能可能是在程序的范围,但反之则不行。
你的程序在做一些事情的时候,我们在查询中调用一个函数(如发行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
如上图所示,与函数声明的第一,你可以从过程调用该函数。但是,如果你尝试像以下(程序之前声明的函数和函数调用过程):
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
编译就失败了,因为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
分享和享受。
我通常会尽量避免前向声明,因为这意味着两组签名必须保持同步才能获得明显的好处。按照正确的顺序组织子程序通常更容易。除非它是一个非常大的包,但即使如此,分解也许是更好的主意。 – APC 2012-03-15 16:56:18
@APC - 我同意前向声明可能会产生一些问题,但在这种情况下,我建议使用一个作为可能的解决方案来解决所提出的问题,因为它似乎可能适合OP遇到的问题。因人而异。 – 2012-03-15 17:37:51
create or replace function test_fun(id in number) return number
as
val number;
begin
get_data(id,val);
return val;
end;
create or replace procedure get_data(a in number ,b out number)
as
id number;
begin
b:=a*a;
end;
--------------------------程序里面的函数-------------- ---------------
create or replace function f_2 return date as
begin
declare
today_date date;
x number;
-------过程声明-----------------
procedure pro_3(d_date out date)
is
begin
d_date:=sysdate;
end pro_3;
BEGIN
---------过程调用--------------------
pro_3(today_date);
for x in 1..7 LOOP
IF TO_CHAR(today_date,'FMDAY')='SUNDAY' THEN
GOTO label_name;
END IF;
today_date:=today_date+1;
END LOOP;
<<label_name>>
DBMS_OUTPUT.PUT_LINE(TO_CHAR(today_date,'DAY')||today_date);
end;
DBMS_OUTPUT.PUT_LINE('today is ' ||TO_CHAR(sysdate,'DAY'));
return sysdate;
end;
---------------------------------- execution -------------- -------------------
exec dbms_output.put_line(f_2);
- 1. 我们可以在dll里面放回调函数吗?
- 2. 我们可以在Java中的函数中调用函数吗?
- 3. 我们可以调用一个类的构造函数吗?
- 4. 我可以在$ scope函数里面写一个这个函数吗?angularjs
- 5. 我们可以在#if语句中调用函数吗?
- 6. 我们可以在javascript函数中调用类属性吗?
- 7. 我们可以在viewController类中明确调用dealloc函数吗?
- 8. 我使用AudioServicesPlaySystemSound函数里面,我可以通过SystemSoundID变回调用程序
- 9. 我们可以从函数调用存储过程吗?
- 10. 我们可以使用jquery里面的angularjs函数
- 11. 我们可以在一个页面中调用多个ko.applyBindings方法吗?
- 12. 我们可以从html文本框中调用java函数吗?
- 13. 我们可以用selenium webdriver建立一个应用程序吗?
- 14. 我们可以从我们的android appllication安装另一个应用程序吗?
- 15. 我们可以从另一个函数调用OnCreate()方法
- 16. Arduino中断函数调用另一个函数可以吗?
- 17. 我可以只在应用程序中调用Realm.getInstance()一次吗?
- 18. 我们可以改变一个函数的实现吗?
- 19. 我们可以从另一个iphone应用程序调用一个iphone应用程序吗?
- 20. 我们可以在onchange函数中调用Django Form中的Ajax吗?
- 21. 我们可以找出哪个函数在Python中调用我的目标函数吗?
- 22. 我们可以称这个函数为快速排序吗
- 23. 我在哪里可以在Swing程序中实现main()函数?
- 24. php5:我们可以开发桌面应用程序吗
- 25. 我们可以在函数返回数据类型为void的例程中调用函数吗?
- 26. 我可以在一个脚本中使用多个函数吗?
- 27. 我们可以用主要方法调试Java程序吗?
- 28. 我们可以在Asp.net MVC视图的c#代码中调用javascript函数吗?
- 29. 我们可以在android应用程序中使用UIAutomator吗?
- 30. 我们可以在angularjs应用程序中使用event.preventDefault()吗?
什么是错误? – 2012-03-15 13:11:59
为什么你不应该? 我建议你读了一点点: 1.怎么问:http://www.catb.org/~esr/faqs/smart-questions.html#before 2. HTTP:// download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/toc.htm – zep 2012-03-15 13:33:25
http://stackoverflow.com/questions/how-to-ask – 2012-03-15 14:09:32