一致没有用过oracle的存储过程,原先一致在用sqlserver现在一学,才发现oracle 存储过程似乎比较复杂。原先我在使用sqlserver的时候,对于一些复杂的查询语句,我经常使用存储过程,比如使用这样的:SELECT * FROM UN_SERV   where partition_acct_month=@acct_month然后在 查询分析器里直接使用exec 存储过程 '200908'
运行他,结果就出来了。但是现在的oracle中的存储过程,对于查询出的结果,必须得声明输出变量,或者使用游标什么的,好像比较麻烦啊。我想请问各位:是不是进行复杂查询(需要或不需要传入参数)的,在oracle中不适合使用存储过程,而是应该使用其他的方法?

解决方案 »

  1.   

    只想看结果的话用dbms_ouput.put_line在过程里面打印出来就可以啦,不必传出来的。
      

  2.   

    恩,那比如,就这样一句,不考虑条件参数之类的:
    SELECT * FROM table_name写成oracle 存储过程就是:create or replace procedure zzltest
    is 
    begin
      dbms_ouput.put_line(select serv_id into c from YWZX_PWJ.XY_DJ200908);
    end;
    就可以了?
      

  3.   

    不好意思,应该是这样,就可以了?
    create or replace procedure zzltest
    is 
    begin
      dbms_ouput.put_line(select * from YWZX_PWJ.XY_DJ200908);
    end;
      

  4.   

    ...create or replace procedure zzltest
    is 
    begin
      for cur1 in select serv_id  from YWZX_PWJ.XY_DJ200908
      loop
       dbms_output.put_line(cur1.serv_id);
      end loop;
    end zzltest;
      

  5.   

    你直接运行下begin 
      for cur1 in select serv_id  from YWZX_PWJ.XY_DJ200908 
      loop 
      dbms_output.put_line(cur1.serv_id); 
      end loop; 
    end ; 看看
      

  6.   

    #6
    运行前键入
    set serveroutput on;回车打开输入
      

  7.   

    哦,忘了说,我使用的是
    pl sql dev.
      

  8.   


    我是在pl sql dev下运行的,会出现pls 00103的错误哦
      

  9.   

    要加()的
    for cur1 in (select serv_id  from YWZX_PWJ.XY_DJ200908 )
      

  10.   

    begin 
      for cur1 in (select serv_id  from YWZX_PWJ.XY_DJ200908)
      loop 
      dbms_output.put_line(cur1.serv_id); 
      end loop; 
    end ; 再看看
      

  11.   

    是通过了,但是,提示:
    记录条数有限制?
    /* Source is wrapped */
      

  12.   

    还有一点疑问,根据 wildwave 提供的语句,通过了的话在plsql dev里,显示结果也是在output 的窗口里运行一存储过程得出查询结果,难道不能显示在查询的表格窗口里么?
      

  13.   

    那你直接在sql窗口
    select serv_id  from YWZX_PWJ.XY_DJ200908不就行了
    为什么要用pl/sql?
      

  14.   

    听这描述,你要创建的不应该是过程
    而是试图
    例如
    create view view_XY_DJ200908 as
      select serv_id  from YWZX_PWJ.XY_DJ200908
      

  15.   

    视图的话,无法传入参数哦比如在mssql里,一存储过程的关键语句如下:
    SELECT * FROM UN_SERV  where partition_acct_month=@acct_month 
    其中@acct_month 为变量然后我在窗口运行如下的命令,其中我就是把'200908'传入@acct_month的:exec 存储过程 @acct_month '200908' 
    这样的好处是,省略每次要做复杂的查询的时候,要写查询语句或者是复制语句
      

  16.   

    定义游标SELECT * FROM UN_SERV  where partition_acct_month=@acct_month 可以写成类似
    open my_cursor for SELECT * FROM UN_SERV  where partition_acct_month=i_acct_month 在PL SQL里可以在存储过程上点右键,按测试,执行完毕后在参数列表中点返回参数后面的小按钮,可以看到放回的值,如果是游标可以看到返回数据的表格。