波斯马BOSSMA Information Technology

几个常用的Oracle存储过程

发布时间:2008年1月6日 / 分类:DataBase / 13,999 次浏览 / 评论

初学Oracle,了解了一下Oracle的存储过程,运行了几个例子,做个备忘,方便以后使用:
1、插入数据:
向一张表里插入若干条数据

/*
创建表tb1
包含两个字段col1、col2
*/
create table tb1(
col1 char(20),
col2 char(20));

/*插入数据的存储过程*/
CREATE OR REPLACE PROCEDURE INSERTAMOUNTTEST
(
ST_NUM        IN     NUMBER,/*起始数值*/
ED_NUM        IN     NUMBER/*结束数值*/
)
IS
BEGIN
declare
       i   number;
begin
/*循环插入*/
FOR i IN ST_NUM..ED_NUM LOOP
INSERT INTO tb1 values(i,'test');
END LOOP;
end;
commit;
/*异常处理*/
EXCEPTION
WHEN OTHERS THEN
rollback;
END;

/*在CommondLine下执行*/
exec INSERTAMOUNTTEST(1,2000);

2、更新数据

CREATE OR REPLACE PROCEDURE UPDATEAMOUNTTEST
(
WHERE_NUM IN VARCHAR2/*SQL语句条件值*/
)
IS
BEGIN
UPDATE tb1 SET col2='test2' where col1 like WHERE_NUM||'%';
/*异常处理*/
EXCEPTION
WHEN OTHERS THEN
rollback;
END;

/*在CommondLine下执行*/
exec UPDATEAMOUNTTEST('11');

3、存储过程之间的调用
以一个查询更新为例子

/*
查询更新存储过程,调用更新存储过程UPDATEAMOUNTTEST2
*/
CREATE OR REPLACE PROCEDURE SELECTUPDATETEST
(
tJStr IN CHAR
)
is
  upStr CHAR(20);
begin
/*
查询出要更新的字段值
*/
select a.col2 into upStr from tb1 a where a.col1 = tJStr;
/*
调用更新存储过程
传入用于更新的两个参数
*/
UPDATEAMOUNTTEST2('11',upStr);
end SELECTUPDATETEST;

/*
更新用的存储过程,被SELECTUPDATETEST调用
*/
CREATE OR REPLACE PROCEDURE UPDATEAMOUNTTEST2
(
WHERE_NUM IN VARCHAR2,/*更新条件*/
SET_NAME IN VARCHAR2/*更新后的字段值*/
)
IS
BEGIN
UPDATE tb1 SET col2=SET_NAME where col1 like WHERE_NUM||'%';
EXCEPTION
WHEN OTHERS THEN
rollback;
END;

在测试的过程中遇到查询不到值的问题,经确认是字符串类型的问题,所以一定要考察字段的字符串类型与传入的参数类型是否一致。
关于这个问题,下边这篇文章给与了详细说明:
[关于数据类型的比较规则(Datatype Comparison Rules)]http://sonic.itpub.net/post/17575/93972

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《几个常用的Oracle存储过程

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论