ORACLE存储过程【转载】
http://blog.bossma.cn/archives/2008/01/80

1、插入数据:
向一张表里插入若干条数据
  1. /*
  2. 创建表tb1
  3. 包含两个字段col1、col2
  4. */
  5. create table tb1(
  6. col1 char(20),
  7. col2 char(20));
  8.  
  9. /*插入数据的存储过程*/
  10. CREATE OR REPLACE PROCEDURE INSERTAMOUNTTEST
  11. (
  12. ST_NUM        IN     NUMBER,/*起始数值*/
  13. ED_NUM        IN     NUMBER/*结束数值*/
  14. )
  15. IS
  16. BEGIN
  17. declare
  18.        i   number;
  19. begin
  20. /*循环插入*/
  21. FOR i IN ST_NUM..ED_NUM LOOP
  22. INSERT INTO tb1 values(i,'test');
  23. END LOOP;
  24. end;
  25. commit;
  26. /*异常处理*/
  27. EXCEPTION
  28. WHEN OTHERS THEN
  29. rollback;
  30. END;
  31.  
  32. /*在CommondLine下执行*/
  33. exec INSERTAMOUNTTEST(1,2000);

2、更新数据

  1. CREATE OR REPLACE PROCEDURE UPDATEAMOUNTTEST
  2. (
  3. WHERE_NUM IN VARCHAR2/*SQL语句条件值*/
  4. )
  5. IS
  6. BEGIN
  7. UPDATE tb1 SET col2='test2' where col1 like WHERE_NUM||'%';
  8. /*异常处理*/
  9. EXCEPTION
  10. WHEN OTHERS THEN
  11. rollback;
  12. END;
  13.  
  14. /*在CommondLine下执行*/
  15. exec UPDATEAMOUNTTEST('11');

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

  1. /*
  2. 查询更新存储过程,调用更新存储过程UPDATEAMOUNTTEST2
  3. */
  4. CREATE OR REPLACE PROCEDURE SELECTUPDATETEST
  5. (
  6. tJStr IN CHAR
  7. )
  8. is
  9.   upStr CHAR(20);
  10. begin
  11. /*
  12. 查询出要更新的字段值
  13. */
  14. select a.col2 into upStr from tb1 a where a.col1 = tJStr;
  15. /*
  16. 调用更新存储过程
  17. 传入用于更新的两个参数
  18. */
  19. UPDATEAMOUNTTEST2('11',upStr);
  20. end SELECTUPDATETEST;
  21.  
  22. /*
  23. 更新用的存储过程,被SELECTUPDATETEST调用
  24. */
  25. CREATE OR REPLACE PROCEDURE UPDATEAMOUNTTEST2
  26. (
  27. WHERE_NUM IN VARCHAR2,/*更新条件*/
  28. SET_NAME IN VARCHAR2/*更新后的字段值*/
  29. )
  30. IS
  31. BEGIN
  32. UPDATE tb1 SET col2=SET_NAME where col1 like WHERE_NUM||'%';
  33. EXCEPTION
  34. WHEN OTHERS THEN
  35. rollback;
  36. END;

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

另外ORACLE的关键字可在v$reserved_words视图中查看
select * from v$reserved_words order by keyword