从sqlplus调用存储过程

问题描述:

如何从sqlplus调用存储过程?从sqlplus调用存储过程

我有一个过程:

Create or replace procedure testproc(parameter1 in varachar2,parameter2 out varchar2) 
begin 

Do something 

end; 

我试图EXEC testproc(12,89) ::返回错误

+2

一般情况下,这是你更好说明你正在得到什么错误,而不是仅仅说它“返回错误” – 2011-12-19 13:10:23

您的程序的第二个参数是OUT参数 - 其值将被分配给过程完成时传递的变量。所以你不能使用这个参数的文字值。

您可以在SQLPlus提示符下声明一个绑定变量和使用:

-- Declare bind variable 
VARIABLE x NUMBER 

-- If necessary, initialize the value of x; in your example this should be unnecessary 
-- since the value of the second parameter is never read 
EXEC :x := 1 

-- Call the procedure 
EXEC testproc(12, :x) 

-- Print the value assigned to the bind variable 
PRINT x 

或者,您也可以使用匿名PL/SQL块:

-- Activate client processing of dbms_output buffer 
SET SERVEROUTPUT ON 

-- In anonymous block, declare variable, call procedure, print resulting value 
DECLARE 
    x NUMBER; 
BEGIN 
    testproc(12, x); 
    dbms_output.put_line(x); 
END; 
/

create or replace procedure autogenerate(t1 in int,t2 in int) 
    is 
    jum number; 
    begin 
      if t1 < 10 then 
      dbms_output.put_line('Value too low.'); 
       else if t1 > 20 then 
       dbms_output.put_line('Value too high.'); 
       end if; 
      end if; 
    end; 
/
    show errors; 
    set serveroutput on; 
    execute autogenerate(1,2); 

试试这个,如果你有问题,只是再次发布它给我:)

+0

创建或替换过程TESTSQLRULEPROC(param1 in varchar2,param2 out varchar2)AS BEGIN \t IF TO_Number(param1) 20 THEN \t \t param2:='Value too high。'; \t \t ELSE \t \t param2:='NULL'; \t END IF; \t例外,当其他人 \t \t param2:='不是数字! END TESTSQLRULEPROC; – Rupesh 2011-12-19 08:29:46

+0

编辑,检查它 – 2011-12-19 08:43:02