SQL> create or replace procedure pro_delete
  2  as
  3  begin
  4  select * from bmb;
  5  commit;
  6  end pro_delete;
  7  /警告: 创建的过程带有编译错误。SQL> 
请问这个最简单的存储过程错在哪个地方?
小弟刚学oracle请各位大虾指教。

解决方案 »

  1.   

    不能直接 select
    存储过程是PL/SQL块,结果转储为另一张,或打印出来是可以的。但就是不能直接select,这和sql不同。可以改成
    insert into table1
     select * from table2;
    commit;
      

  2.   

    在存储过程中要使用select ... into ... from table1
    也就是你必须要将查询列保存到相应的变量之中,普通变量只能存放一个值
    如果查询的一个数据集(有多行记录),可以使用游标循环来处理
    create or replace procedure pro_delete as
        v_col1 varchar2(20);
    begin
        -- 查询一行记录,将列col1的值保存到变量v_col1中
        select col1 into v_col1 from bmb where rownum<2;
        --屏幕上显示v_col1的值
        dbms_output.put_line(v_col1);
        --commit;
    end pro_delete;
    /
      

  3.   

    必须要执行操作。不能只是 select 
     比如说   select into 
      

  4.   

    看你的过程的内容 你是想建一个视图吗?
    存储过程是用来操作复杂的逻辑的 用简单的sql无法完成才要用过程
    你只有select 没有操作 是不行的
    要么不用select 要么是 select col into 变量名 form table
      

  5.   

    给你看一个我自己建的存储过程
    create or replace procedure mw_app.mwp_graderank
    (
       stdGrade in number,
       yxxskm out varchar2,
       ybxskm out varchar2
    )
    is
       p_stdgrade number := stdGrade;
       p_grade number;
    begin
       select grade into p_grade from mw_app.mwt_gradeinfo;
       if(p_grade>p_stdgrade)then
              select gra.stuname||gra.stuname into yxxskm from mw_app.mwt_gradeinfo gra;
       elsif(p_grade=p_stdgrade)then
              select gra.stuname||gra.stuname into yxxskm from mw_app.mwt_gradeinfo gra;
       else
              select gra.stuname||gra.stuname into ybxskm from mw_app.mwt_gradeinfo gra;
       end if;
    end;
    调用的时候 传进来一个成绩标准,如果成绩大于这个标准做一种处理,小于该标准做一种处理,再把结果返回