各位好:现在在oracle9i中写了一个非常简单的存储过程,就是存储过程的输入参数是手机号码,根据这个输入,从表中查询出有这个号码的所有记录,
存储过程如下:
 CREATE OR REPLACE PROCEDURE TESTD(PARA1 IN VARCHAR2) AS
 SELECT * FROM KFWEB_OPERATELOG WHERE PHONE_NO=PARA1;其中TESTD是存储过程过程的名字,KFWEB_OPERATELOG 是表名,PHONE_NO是一个字段名,类型是varchar2

这条语句运行成功,但是带有警告(我这个工具没有办法看到警告信息)刷新存储过程的文件夹也是空的,运行代码调用这个存储过程,出现异常:这个存储过程是无效的,说明存储过程没有被建立。想请问一下各位,怎么写才能让这个存储过程完全正确,谢谢!!!

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE TESTD(PARA1 IN VARCHAR2)
     AS
     begin 
       SELECT * FROM KFWEB_OPERATELOG WHERE PHONE_NO=PARA1; 
     end;这们写就不会出错,直接执行有返回值;但代码调也不会返值,要想返回值所有数据记录,要用游标,,自己去看一下吧!
      

  2.   

    我写了一个简单的过程,旨在抛砖引玉.如果发现有错,还望大家给予纠正,谢谢!
    假设原始表如下:
    mobile_info:
    mobile_id    call_date    addr
    13999999999  20070707     beijing
    13999999999  20070504     shanghai
    13888888888  20070812     chengdu
    13777777777  20070630     beijing
    过程如下:
     create or replace procedure chaxun(mobile_no in varchar2) as
      v_no number(10):=1;
      cursor cur_cx is select * from mobile_info where mobile_id=mobile_no;
     begin
       dbms_output.put_line('与'||mobile_no||'相关的数据信息如下:');
       for cur_result in cur_cx loop
        dbms_output.put_line('第'||v_no||'条呼叫时间为:'||cur_result.call_date||',呼叫地点为:||cur_result.addr);
      v_no:=v_no+1;
       end loop;
     end chaxun;
    执行:
    exec chaxun('13999999999');
    (结果略...)
      

  3.   

    Oracle的存儲過程不會返回數據集的.
      

  4.   

    CREATE   OR   REPLACE   PROCEDURE   TESTD(PARA1   IN   VARCHAR2)   AS
      OPERATE KFWEB_OPERATELOG%ROWTYPE;
      CURSOR OPER  IS  SELECT   *   FROM   KFWEB_OPERATELOG   WHERE   PHONE_NO=PARA1; //声明游标
      BEGIN
       OPEN OPER(); // 打开游标
       LOOP
       FETCH OPER INTO OPERATE ;
       EXIT WHEN OPEN%NOTFOUND;
       DBMS_OUTPUT.PUT_LINE(OPERATE.表中的字段名);
       END LOOP;
       END;//调用存储过程
     set serveroutput on
     execute TESTD(参数);
      

  5.   

    要求返回值得话,就用
    函数阿,用存储过程就比较麻烦。
    create or replace function TESTD(PARA1 IN VARCHAR2 ) return varchar2 is
      Phone_nos varchar2;
    begin
      SELECT   *   FROM   KFWEB_OPERATELOG   
      into Phone_nos
      WHERE   PHONE_NO = PARA1
      
      return(Phone_nos);
    end TESTD;这里的Phone_nos最好用集合来存储。