http://blog.bossma.cn/archives/2008/01/80
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
select * from v$reserved_words order by keyword