如何建立及调用oracle存储过程-实例
Oracle SQL Developer定制每天执行一次存储过程的计划任务
1.获取昨天一天的所有数据
select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd');
2.将查询到的数据插入到对应的表中
insert into brsj_kms_distributeproblem ( pk_information ,problemno ,problemname ,productid ,partno ,createUser ,createTime ,dutygroup ,dutyuser ,batch ,problemtype ,emergencydegree ) select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd');
这里特别说明一下,第一个括号后面没有values关键字,加上values关键字执行就会报错,错误的表达式。
3.测试上面的SQL语句无误后,开始创建存储过程
create procedure ScheduledTasks is begin insert into brsj_kms_distributeproblem ( pk_information ,problemno ,problemname ,productid ,partno ,createUser ,createTime ,dutygroup ,dutyuser ,batch ,problemtype ,emergencydegree ) select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd'); COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback'); ROLLBACK; END;
创建好了之后,刷新一下,在左侧的过程文件夹中就可以看到对应的过程名称,检查图标上是否有红叉,如果有,说明语句错误,重新检查哪里出错。如果没有错误,直接右击,选择运行,运行成功后,可以查看对应的表中是否成功插入了数据,需要注意的是要确保执行过程的SQL语句逻辑上是能产生数据的,例如查询昨日的所有记录,如果昨日没有数据产生,即便SQL语句无误也不会产生结果,所以需要提前添加一些测试数据,确保能看到结果。
运行到这里,能看到新产生的数据,说明创建的过程是没有问题的,接下来就是如何每天让它运行一次的问题了。
Oracle存储过程的调用
如何执行oracle存储过程,就exec一下?
不单单是exec一下,还是得分情况:
1.如果是命令窗口就用exec 存储过程名,举个栗子:
EXEC procedure;--procedure是存储过程名
2.如果是PL/SQL窗口就用 begin 存储过程名 end; 举个栗子:
begin procedure;--procedure是存储过程名 end;
3.如果是程序中调用就用 call 存储过程名 ,举个栗子:
hibernateDao.excuteSqlUpdate("{Call proc_stuInfo()}");//存储过程proc_stuInfo
另附 存储过程创建方法:
create or replace procedure pro_test--pro_test为存储过程名
is
temp varchar2(128);--temp为存储过程临时变量
bengin
select count(*) into temp from TEST;--这里为什么会使用temp变量,下面会提到
insert into TEST values(3,'sss',25,'asd');
commit;--切记commit一下(提交)
end;
注意:在存储过程中是不能直接出现"select * from test",这种简单查询,必须将查询出来的数据放入存储过程变量中,如上所示的temp变量。
部分知识参考来自:
1.https://www.cnblogs.com/plumsq/p/7151579.html
2.https://blog.csdn.net/likecandy/article/details/82719645
原文地址:https://www.cnblogs.com/Xinqing2010/p/12706968.html
- 地图知识-坐标网
- silverlight/xap如何接收参数?
- Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
- Keepalived使用梳理
- mysql操作命令梳理(4)-中文乱码问题
- 今日头条李磊:机器写作与 AI 辅助创作
- 【1】CommonCode快速代码集
- mysql操作命令梳理(3)-pager
- 前后端协调处理checkbox
- mysql操作命令梳理(2)-alter(update、insert)
- 测试数据的整理(1)
- redis持久化策略梳理及主从环境下的策略调整记录
- 测试数据——有效范围(2)
- 交通部:明年将制定无人驾驶政策
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现强制下线功能的示例代码
- 如何用HMS Nearby Service给自己的App添加近距离数据传输功能
- Android自定义控件之圆形进度条动画
- Android 使用 Scroller 实现平滑滚动功能的示例代码
- Android文件操作工具类详解
- Android之RecycleView实现指定范围的拖动效果
- Android 通过代码安装 APK的方法详解
- Android ListView实现无限循环滚动
- ignite:一个漂亮的多用户SS/SSR面板
- FreshRSS:开源免费的RSS阅读器
- 使用snap快速安装RocketChat你的聊天服务器
- CuteOne:一款基于Python3的OneDrive多网盘挂载程序,带会员/同步等功能
- Baidu Sitemap Generator在PHP7无法生成XML的解决方法
- MFC实现的Socket通信
- 128-在线翻译