Oracle存储过程语法:
create or replace procedure 存储过程名(param1 in type,param2 out type)
as
变量1 类型(值范围);
变量2 类型(值范围);
begin
select count(*) into 变量1 from 表名 where 列名=param1
......
end 存储过程名字
注意事项
1、存储过程参数不带取值范围,in表示传入,out表示输出
2、变量带取值范围,后面接分号
3、在判断语句前最好先用count(*)函数判断是否存在该条操作记录
4、用select 。。。into。。。给变量赋值
5、在代码中抛异常用 raise+异常名
举例:
无参存储过程
create or replace procedure test
is
--设置变量total默认值
total number:=0;
begin
--给变量total赋值
select count(*) into total from ycxk_apply_card;
--输出总条数total
DBMS_OUTPUT.PUT_LINE(total);
--操作insert、update、delete才需要提交
--commit;
end test;
带参存储过程
create or replace procedure addYcxkAreaCode
(
province_code in varchar2,
area_code in varchar2,
area_name in varchar2
)
is
begin
insert into ycxk_area_code values (province_code, area_code, area_name);
commit;
end;
--------------------------------
以下为Oracle存储过程知识点总结
1、用select 。。。into。。。给变量赋值
将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录则抛出NO_DATA_FOUND)
例子:
begin
select col1, col2 into 变量1, 变量2 from test where id=1;
exception
when no_data_found then xxxx;
end;
2、if判断
if test=1 then
begin
do something;
end;
end if;
3、while 循环
while test=1 loop
begin
do somathing;
end;
end loop;
4、变量赋值: test:=1;
5、在oracle中,数据表别名不能加as,如:
select a.appname from appinfo a; -- 正确
select a.appname from appinfo as a; -- 错误
也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧
6、在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了
select af.keynode into kn from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;
-- 有into,正确编译
select af.keynode from APPFOUNDATION af where af.appid=aid and af.foundationid=fid;
-- 没有into,编译报错,提示:Compilation
Error: PLS-00428: an INTO clause(子句) is expected in this SELECT statement
7、在使用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。
可以在该语法之前,先利用select count(*) from查看数据库中是否存在该记录,如果存在,select...into...
8、在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错
select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid;-- 正确运行select af.keynode into kn from APPFOUNDATION af
where af.appid=appid and af.foundationid=foundationid;-- 运行阶段报错,提示
ORA-01422:exact fetch returns more than requested number of rows
9、在存储过程中,关于出现null的问题
假设有一个表A,定义如下:
create table A(
id varchar2(50) primary key not null,
vcount number(8) not null,
bid varchar2(50) not null -- 外键
);
如果在存储过程中,使用如下语句:select sum(vcount) into fcount from A where bid='xxxxxx';
如果A表中不存在bid="xxxxxx"的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:
if fcount is null then
fcount:=0;
end if;
这样就一切ok了。
10、Hibernate调用oracle存储过程
this.pnumberManager.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
CallableStatement cs = session.connection()
.prepareCall("{call addYcxkAreaCode(?)}");
cs.setString(1, "123");
cs.execute();
return null;
}
});
分享到:
相关推荐
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
oracle 存储过程实例 oracle存储过程实例
oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel
oracle 存储过程 unwrap 图形解密 工具
oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO ...
可以将SQL Server存储过程转为oracle存储过程的工具
ibatis调用oracle存储过程分页
帆软报表调用Oracle存储过程如果存储过程定义中没有参数,但是设计器中缺弹出一个storeParameter1参数的解决插件
4、开发指南:《Oracle存储过程入门指南&100+种真实业务场景存储过程实例.pdf》,可以帮助初学者系统学习。 5、资源包括“通用存储过程整理” 和 “真实业务存储过程整理” 两部分,通用适合各种系统,可以无缝隙...
oracle存储过程加密破解 0
使用java实现oracle存储过程。 共有3个小例子。实现的功能 1、无返回值的存储过程 如 insert 2、有返回值的存储过程(非列表)select id from tab 3、返回列表 如:select * from tab 顺便鄙视下csdn,作为一个it...
oracle存储过程学习经典入门 非常好的 初学者必看
oracle 存储过程 函数 dblink 绝对对工作和平时学习有价值的资料。针对个人具体情况做修改即可使用
Oracle存储过程中使用临时表 会话级临时表 事务级临时表
oracle 存储过程批量提交
oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记oracle存储过程笔记
行业内Oracle存储过程最基本的开法规范,适合oracle入门小白学习
oracle 存储过程实例 oracle 存储过程实例 oracle 存储过程实例 oracle 存储过程实例
linux系统中使用shell脚本对oracle存储过程进行编译
oracle存储过程+日期+定时任务Job oracle存储过程+日期+定时任务Job oracle存储过程+日期+定时任务Job