已有好几年,没有碰过存储过程了,最近因为项目需要,故重新捡起来。看别人写的存储过程特别优雅,一到自己手上就错误百出,很有感慨。
需求:就是针对select * from A;建一存储过程返回结果集
编写测试用例:
create table test1(
col1 varchar2(10),
col2 varchar2(10)
);
insert into test1 values('a','a');
insert into test1 values('b','b');
insert into test1 values('c','c');
insert into test1 values('d','d');
insert into test1 values('e','e');
insert into test1 values('f','f');
create or replace package test_package
is
type cursor_type is ref cursor;
end test_package;
create or replace procedure test_query_info(v_col in varchar2,v_cur out test_package.cursor_type)
is
begin
open v_cur for select col2 from test1 where col1 = v_col;--返回指定列
//open v_cur for select * from test1 where col1 = v_col;--返回所有列
end test_query_info;
编写心得:
第一:存储过程的参数类型,我们平常建立表时,比如name varchar2(20),都会在varchar2后面指定长度,但是在存储过程的参数里不可以这样,不然会创建失败的。
第二:open v_cur for 后面的select语句,必须是完整的一行,不能换行,不然程序会理解成是两行,创建也会失败的。