请问这个存储过程哪写错了`~???谢谢``create or replace procedure test2(customercode in varchar2
                                ) asbegin
    OPEN 
      SELECT * FROM t_mc_customer c
       WHERE c.customercode= || customercode;
   
end test2;

解决方案 »

  1.   

    游标不是这样打开的,你要先定义,如果不先定义,可以用for循环打开
      

  2.   

    create or replace procedure test2(p_customercode in varchar2
                                    ) as
    begin
      for cur_record in 
          SELECT * FROM t_mc_customer c
          WHERE c.customercode =  p_customercode loop
        --do something
      end loop;
    end test2;
    还有变量名尽量不要与字段名一样,前面加一个前缀
      

  3.   

    上面的语句还有点问题喔`
    在编辑时出现,符号"select "在需要下列之一时````````\
      

  4.   

    create or replace procedure test2(p_customercode in varchar2
                                    ) as
    begin
      for cur_record in
          (SELECT * FROM t_mc_customer c
          WHERE c.customercode =  p_customercode) loop -- select语句外面加上括号
        --do something
        dbms_output.put_line(''); --这里要写语句,要不也编译通不过
      end loop;
    end test2; 
      

  5.   

    建议你找一下Oracle游标的资料看一下
      

  6.   

    请问`` dbms_output.put_line(''); 这句是什么意思``里面要写什么~?请原谅我``不懂就问`
      

  7.   

    这是我写的一个用来测试的,没什么意义,这条语句是在屏幕上打印字符串,与这个游标没什么关系,你要在loop...end loop 的循环体里面写操作游标的一些语句。
      

  8.   

    给你个例子
    包头部分
    create or replace package PG_111 is
    TYPE SC_CURSOR IS REF CURSOR;  --定义游标
    /**********************************************/
    PROCEDURE SP_222(
                          PI_id            IN  table.id%TYPE,       
                           PO_Cursor          out SC_CURSOR
                             );
    /*************END*********************************/
    包体部分
    create or replace package body PG_111 is
    /**********************************************/
    PROCEDURE SP_222(
                           PI_id         IN  table.id%TYPE,                
                              PO_Cursor          out SC_CURSOR
                             )
    --*****************************************************
        -- Name:             
        -- Description:      
        -- Creator           
        -- Created date:      
        -- Modfied date:      
        -- Modfied by  :
        -- Modfied Conents:
     --*****************************************************
     IS
        BEGIN
         open PO_Cursor for
    select * from table  WHERE id=PI_id;
       END;
    /*************END*********************************/
      

  9.   


    可以这样修改
    create or replace procedure test2(customercode in varchar2)
    as 
    TYPE v_mc_cursor IS REF CURSOR  --定义目标数据类型
    v_data_cursor  v_mc_cursor    --定义游标类型
    begin 
        OPEN v_data_cursor FOR --把查询出的数据保存在游标
          SELECT * FROM t_mc_customer c 
          WHERE c.customercode= customercode; 
    end test2;
    希望有帮助!!!
      

  10.   


    create or replace procedure test2(customercode in varchar2,MYCUR OUT SYS_REFCURSOR 
                                    ) as begin 
        OPEN MYCUR for
          SELECT * FROM t_mc_customer c 
          WHERE c.customercode= || customercode; 
      
    end test2;