我是新手,请教下:
我用PL/SQL建了一个存储过程,编译是没有问题,运行也没问题,存储过程代码如下:
CREATE OR REPLACE PROCEDURE test(
  arg1 varchar2:='',
  arg2 varchar2:='',
   tempvalue  OUT integer --返回值
 )
 。。后省略现在我想在触发器中得到test的返回值,并赋给一个变量nid,我写的代码如下:
nid :=test('tar1','tar2',0);--其中第三个参数,用于返回值,不知道该怎么传值。。如果传0编译的时候报错:
Error: PLS-00222: 在此范围中不存在名为 'test' 的函数请问怎么才能获得存储过程的参数呢?
我的目的就是给test存储过程传2个参数,然后操作数据库得到一个返回值。。
大侠们帮帮忙吧~

解决方案 »

  1.   

    declare
     out_var int;nid :=test('tar1','tar2',out_var);--
      

  2.   

    1. 应该这样调用test('tar1','tar2',nid);
    2.  PLS-00222: 在此范围中不存在名为 'test' 的函数。 关于这点,你的函数和触发器在同一个用户下没?没有的话要另外处理。
    比如,test是scott的函数,而触发器在hr下建立的。那么要在scott用户下降test函数的执行权限授予给hr,执行grant execute on test to hr。然后在hr的触发器中调用时加上用户名前缀,如scott.test(..)
      

  3.   

    declare
     out_var int;
    begin
    test('tar1','tar2',out_var);end;如果是存储过程是这样调用
      

  4.   


    这样调用之后,我怎么对nid进行操作啊
      

  5.   

    test('tar1','tar2',nid);中的nid是你在存储过程中定义的变量,得到这个返回值,你想怎样用就怎样用了。
      

  6.   

    首先感谢大家的帮助~~~~~~~~~~~~~~~~~~太感谢了!问题解决,
    是传值的问题,传0的时候,不知道为什么报找不到存储过程,按照mg_chen和nGX20080110的方法就可以了,
    就是说,把返回值变量传入存储过程!
    谢谢大家~
    结贴散分~
      

  7.   

    nid就是调用存储过程之后的返回值,以后在程序中想用它的时候直接用就行,是吧