下面是存储过程的代码:create or replace procedure p_test is
  v_serialno tbl_users.user_serialno%Type;
  v_usepass varchar2(60);
  cursor c_find is select user_serialno from tbl_users u,tbl_organization o where u.org_serialno=o.org_serialno;
begin
  open c_find;
  fetch c_find into  v_serialno;  
  while c_find%found loop
    select u.username||':'||u.password into v_usepass  from tbl_users u where u.user_serialno=v_serialno;
    dbms_output.put_line(v_usepass );
    fetch c_find into  v_serialno;  
  end loop;
  close c_find;
end ;在PL/SQL中执行出错。执行代码如下:exec p_test;
出现下面的错误:ORA-00900:invalid SQL statement .请教什么原因。

解决方案 »

  1.   

    在sql*plus可以这样执行,但在pl/sql里要这样写:begin
        p_test;
    end;
      

  2.   

    应该是sql出问题了。你可以单步调试看看啊,在pl/sql中是可以调试的。
    select u.username||':'||u.password into v_usepass  from tbl_users u where u.user_serialno=v_serialno;
    感觉就是这句出的问题。
      

  3.   

    确定是编译成功了?没有什么错误吗?有的话,show error看一下.在select 前面把v_serialno printout出来看看呢。是什么。
      

  4.   

    create or replace procedure p_test is
      v_serialno tbl_users.user_serialno%Type;
      v_usepass varchar2(60);
      cursor c_find is select user_serialno from tbl_users u,tbl_organization o where u.org_serialno=o.org_serialno;
    begin
      open c_find;
      loop
      fetch c_find into  v_serialno;  
      exit when c_find%notfound;
        select u.username||':'||u.password into v_usepass  from tbl_users u where u.user_serialno=v_serialno;
        dbms_output.put_line(v_usepass );
      end loop;
      close c_find;
    end ;