CREATE OR REPLACE  PROCEDURE COMPOSE
(
  IDNum         out   NUMBER,
  StationNum    in    NUMBER,
  DeviceNum     in    NUMBER,
  DataNum       in    NUMBER
  
)
为什么在调用的时候却给IDnum赋值一个v_out的变量呢?你又没有给v_out赋值

解决方案 »

  1.   

    to:mujqdz   不会吧老兄,v_out 是用来接收输出的变量
    修改存储过程名字应该没关系吧。
      

  2.   

    CREATE OR REPLACE  PROCEDURE COMPOSE
     (
       IDNum         out   NUMBER,
       StationNum    in    NUMBER,
       DeviceNum     in    NUMBER,
       DataNum       in    NUMBER
     )
     as
       LogNum NUMBER;
     begin
       if StationNum > 65530 then
          LogNum := StationNum;
       else
          SELECT 100 into LogNum
          FROM dual;
       end if;
       IDNum := LogNum *(2**17) + DeviceNum*(2**11) + DataNUm;
     end;
     /
     declare
     v_out number;
    begin
     compose(v_out,1,1,1);
     end;
    没有问题.
      

  3.   

    用这个调试试试:
    DECLARE
    idnum NUMBER;
    BEGIN-- Now call the stored program
      compose(idnum,1,1,2);-- Output the results
      dbms_output.put_line('idnum = '||TO_CHAR(idnum));  COMMIT;
    EXCEPTION
    WHEN OTHERS THEN
      dbms_output.put_line('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM);
    RAISE;
    END;
      

  4.   

    compose是系统函数,调用的时候加上你的用户名就ok了。例如;username.comose(idnum,1,1,2)