Oracle10g下简单存储过程编写

经过个把小时的折腾,写了一个简单的存储过程。一直都是改别人的存储过程,没有自己
写过,这样很不好。写了一个简单功能的:
有判断选择,循环遍历游标。

存储过程注意点:
1.注意其基本的语法。
2.关注游标,在10g中定义游标一般都使用sys_refcursor
而cursor只是用来在申明部分进行初始化,而sys_refcursor可以直接
使用。
3.%found %notfound %isopen等游标属性


/**
*@date:2009-06-16
*
*/
CREATE OR REPLACE PROCEDURE SP_TEST(STRFLAG IN STRING,
CUR_FCONSIGN out sys_refcursor ,
CUR_FEE out sys_refcursor ,
INTCOUNT OUT INTEGER) AS

fcsgConsignId varchar2(200); --委托表ID
fcsgConsignNo varchar2(200); --委托表NO
i integer;

--定义中间游标
cursor CUR_TEMP is
SELECT fc.fcsg_consign_id, fc.fcsg_consign_no
FROM FCONSIGN fc
where rownum <= 5;

BEGIN

--如果传的标志为1,则返回CUR_FCONSIGN
IF STRFLAG = 0 THEN
SELECT COUNT(*) INTO INTCOUNT FROM FCONSIGN;
DBMS_OUTPUT.PUT_LINE(INTCOUNT);
--返回fconsign表的所有数据
open CUR_FCONSIGN for
select fc.fcsg_consign_id, fc.fcsg_consign_no
from fconsign fc
where rownum <= 100;

ELSIF STRFLAG = 1 then
select count(*) into INTCOUNT from fexpense;
dbms_output.put_line(INTCOUNT);
--返回费用的数据fexpenses
open CUR_FEE for
select fe.fexp_expense_id, fe.fexp_bill_no
from fexpense fe
where rownum <= 5;
END IF;


--打开游标
open CUR_TEMP;
--把游标的某行值赋值给变量
fetch CUR_TEMP
into fcsgConsignId, fcsgConsignNo;
dbms_output.put_line('first' || fcsgConsignId || fcsgConsignNo);
dbms_output.put_line('------------------------');

--打印委托表中的前一百条数据
--遍历游标
i := 1;
while CUR_TEMP%found loop
fetch CUR_TEMP
into fcsgConsignId, fcsgConsignNo;
dbms_output.put_line(i);
dbms_output.put_line(fcsgConsignId || fcsgConsignNo);
i := i + 1;
end loop;

--关闭游标
if CUR_TEMP%isopen then
close CUR_TEMP;
end if;


END SP_TEST;

凡事由简入难~~~~基础很重要,要不停的补充。

你可能感兴趣的:(oracle10g)