十几年没有用oracle的存储过程了,有些东西已经忘了,没有想到今天又要用。在这里写个例子。
它演示了存储过程的格式,游标的使用,循环、判断的使用,还有直接执行一个拼接的SQL的用法。
以下是代码:

create or replace procedure wanglc_test is
v_table_name varchar2(50);
v_sql varchar2(4000); cursor cur_get_users is
select username, created from all_users;
v_username varchar2(50);
v_created date;
begin
dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ||
' call procedure wanglc_test begin...'); open cur_get_users;
loop
fetch cur_get_users
into v_username, v_created;
exit when cur_get_users%notfound; dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') || ' ' ||
v_username || ' -- ' || v_created); if (v_username = 'SYS' or v_username = 'SYSTEM') then
dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') || ' ' ||
v_username || ' is DBA!!!');
/*
insert into sys_user(name,created) values('SYS',sysdate)
*/
v_sql := 'insert into sys_user(name,created) values(''' || v_username ||''',sysdate)';
dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') || ' ' ||
v_sql); execute immediate v_sql;
execute immediate 'commit';
end if; end loop;
close cur_get_users; dbms_output.put_line(to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') ||
' call procedure wanglc_test end.');
end wanglc_test;

如果存储过程编译出错,可以在这里找错误点:
select * from all_errors where name = upper('wanglc_test');

在命令行执行存储过程
SQL> set serveroutput on size 10000000;
SQL> exec wanglc_test;
2019-06-04 23:56:33 call procedure wanglc_test begin...
2019-06-04 23:56:33 ACCT_OSCXK -- 21-5月 -19
2019-06-04 23:56:33 CUST_OCS0520 -- 20-5月 -19
2019-06-04 23:56:33 ACCT0520 -- 20-5月 -19
2019-06-04 23:56:33 WMSYS -- 24-8月 -13
2019-06-04 23:56:33 APPQOSSYS -- 24-8月 -13
2019-06-04 23:56:33 DBSNMP -- 24-8月 -13
2019-06-04 23:56:33 ORACLE_OCM -- 24-8月 -13
2019-06-04 23:56:33 DIP -- 24-8月 -13
2019-06-04 23:56:33 OUTLN -- 24-8月 -13
2019-06-04 23:56:33 SYSTEM -- 24-8月 -13
2019-06-04 23:56:33 SYSTEM is DBA!!!
2019-06-04 23:56:33 insert into sys_user(name,created) values('SYSTEM',sysdate)
2019-06-04 23:56:33 SYS -- 24-8月 -13
2019-06-04 23:56:33 SYS is DBA!!!
2019-06-04 23:56:33 insert into sys_user(name,created) values('SYS',sysdate)
2019-06-04 23:56:33 call procedure wanglc_test end.
PL/SQL procedure successfully completed

另外,可以在plsql developer中右键点击存储过程名称进行测试。此处略。

最新文章

  1. 6.openssl rsautl和openssl pkeyutl
  2. UIScrollview自动布局,UIScrollviewAutolayoutDemo
  3. Dapper使用
  4. matlab 怎么保存plot的图 到指定文件夹
  5. Java使用poi包读取Excel文档
  6. nginx启动,重启,关闭
  7. DOM节点的创建
  8. 基于jQuery的控件:弹框
  9. 居于U2000手机管理光猫,小区运营商FTTH光猫注册神器,MA5680T手机管理,自动添加光猫
  10. VMWare 安装 Linux
  11. uvalive 3126 Taxi Cab Scheme
  12. Java并发容器之非阻塞队列ConcurrentLinkedQueue
  13. zabbix监控日志文件
  14. web请求的状态码
  15. 8.在XamarinAndroid上进一步控制包的大小
  16. 通过Roslyn构建自己的C#脚本(更新版)
  17. Selenium2+python自动化36-判断元素存在
  18. 基于.net 的加载自定义配置-误操作
  19. homebrew常用指令
  20. Uva 11396 爪分解

热门文章

  1. centos 7 firewall(防火墙)开放端口/删除端口/查看端口
  2. 分布式消息中间件之kafka设计思想及基本介绍(一)
  3. Windows环境中编译opencv3.0同时加入OPENCV_contrib库及解决遇到相关问题[contrib 必须要3.1以上的opencv才支持了]
  4. JDBC概述及JDBC完成对Oracle的增删改查
  5. STM32/EMC/ZILIAO
  6. 给移动硬盘装win10,知道这些就足够了
  7. 【PKUSC2018】最大前缀和
  8. No valid Maven installation found. Either set the home directory in the configuration dialog or set
  9. java 日期增加
  10. 【JZOJ5605】【NOI2018模拟3.26】Arg