已有好几年,没有碰过存储过程了,最近因为项目需要,故重新捡起来。看别人写的存储过程特别优雅,一到自己手上就错误百出,很有感慨。
需求:就是针对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_packageistype 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)isbegin 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语句,必须是完整的一行,不能换行,不然程序会理解成是两行,创建也会失败的。