create procedure p1 as
begin
       select count(*) from all_users;
endexec p1;为什么最后一条SQL执行存储过程的时候,提示错误“错误的SQL”?

解决方案 »

  1.   

    create procedure p1 as 
    begin 
          select count(*) from all_users; 
    end 
    goexec p1; 
      

  2.   

    create procedure p1 as 
    begin 
          select count(*) from all_users; 
    end;begin
    exec p1; 
    end;
      

  3.   

    create procedure p1 as
    begin
          select count(*) from all_users;
    end;
    /
    exec p1; 
      

  4.   

    oracle里query语句是不能直接 这样执行的,需要用select ... into xxx from xxxx这样的方式。如果要执行query的话,只能在execute immediate作为动态sql执行。
      

  5.   

    reate procedure p1 
    as 
          l_i_count   number;
    begin 
          select count(*) into l_i_count from all_users; 
    end 
      

  6.   

    oracle里 query语句是不能直接 这样执行的,需要用select ... into xxx from xxxx这样的方式。 如果要执行query的话,只能在execute immediate作为动态sql执行。select count(*) from all_users;  是不可以的 
      

  7.   


    CREATE PROCEDURE P1 
    (NUM OUT NUMBER)
    as 
    begin
    select count(*) into NUM from all_users; 
    end P1 ;编译一下SQL>VARIABLE NUM NUMBER;
    SQL>EXEC P1(:NUM);不妨试一下
      

  8.   

    存储过程里不能直接select
    想知道select的结果的话 需要先赋值到一个变量中 
    SQL> CREATE PROCEDURE P1
      2  (NUM OUT NUMBER)
      3  as
      4  begin
      5  select count(*) into NUM from all_users;
      6  end P1 ;
      7  /Procedure created.SQL> variable test number;  --定义个变量test
    SQL> exec P1(:test)  --执行存储过程P1PL/SQL procedure successfully completed.SQL> print test  --打印出变量的值      TEST
    ----------
            40SQL> select count(*) from all_users; --验证一下  COUNT(*)
    ----------
            40
      

  9.   

    建议看看Oracle10g编程,存储过程部分
      

  10.   

    之前声明个游标,然后open cursor for select.....
      

  11.   

    不能这样写,需要写游标的oracle数据库不是mssql或者mysql再说存储过程主要是处理业务逻辑的,查询语句没有什么意义