一致没有用过oracle的存储过程,原先一致在用sqlserver现在一学,才发现oracle 存储过程似乎比较复杂。原先我在使用sqlserver的时候,对于一些复杂的查询语句,我经常使用存储过程,比如使用这样的:SELECT * FROM UN_SERV where partition_acct_month=@acct_month然后在 查询分析器里直接使用exec 存储过程 '200908'
运行他,结果就出来了。但是现在的oracle中的存储过程,对于查询出的结果,必须得声明输出变量,或者使用游标什么的,好像比较麻烦啊。我想请问各位:是不是进行复杂查询(需要或不需要传入参数)的,在oracle中不适合使用存储过程,而是应该使用其他的方法?
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;
就可以了?
create or replace procedure zzltest
is
begin
dbms_ouput.put_line(select * from YWZX_PWJ.XY_DJ200908);
end;
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;
for cur1 in select serv_id from YWZX_PWJ.XY_DJ200908
loop
dbms_output.put_line(cur1.serv_id);
end loop;
end ; 看看
运行前键入
set serveroutput on;回车打开输入
pl sql dev.
我是在pl sql dev下运行的,会出现pls 00103的错误哦
for cur1 in (select serv_id from YWZX_PWJ.XY_DJ200908 )
for cur1 in (select serv_id from YWZX_PWJ.XY_DJ200908)
loop
dbms_output.put_line(cur1.serv_id);
end loop;
end ; 再看看
记录条数有限制?
/* Source is wrapped */
select serv_id from YWZX_PWJ.XY_DJ200908不就行了
为什么要用pl/sql?
而是试图
例如
create view view_XY_DJ200908 as
select serv_id from YWZX_PWJ.XY_DJ200908
SELECT * FROM UN_SERV where partition_acct_month=@acct_month
其中@acct_month 为变量然后我在窗口运行如下的命令,其中我就是把'200908'传入@acct_month的:exec 存储过程 @acct_month '200908'
这样的好处是,省略每次要做复杂的查询的时候,要写查询语句或者是复制语句
open my_cursor for SELECT * FROM UN_SERV where partition_acct_month=i_acct_month 在PL SQL里可以在存储过程上点右键,按测试,执行完毕后在参数列表中点返回参数后面的小按钮,可以看到放回的值,如果是游标可以看到返回数据的表格。