初学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
发表评论
相关文章
国内AI资源汇总,AI聊天、AI绘画、AI写作、AI视频、AI设计、AI编程、AI音乐等,国内顺畅访问,无需科学上网。
扫码或点击进入:萤火AI大全
文章分类
最新评论