游标,循环,触发器....
来源:互联网 发布:手机淘宝 手机天猫 编辑:程序博客网 时间:2024/06/09 17:11
游标
--定义一个游标
declarecursor cur_sel
isselectename,salfrom scott.emp; --给游标关联数据源
v_ename nvarchar2(64);
v_sal int ;
begin
open cur_sel;--打开游标(真正去执行关联的sql语句)
loop
--读取一行游标,往下读一行
fetch cur_sel intov_ename,v_sal;
dbms_output.put_line(v_ename||':'||v_sal);
exitwhen cur_sel%notfound;
endloop;
close cur_sel;--关闭游标
end;
循环语句
Loop
Exit when 条件
End loop
While 条件
Loop
End loop
For 名 in 1..2
Loop
End loop;
索引
createindex index_lma_lmname on lma(lmname);
createindex索引名 on 表名(字段名)
触发器
在进行操作之前运行:before
在进行操作之后运行:after
使用
foreachrow后 old new才可以使用
删除::old.字段名
添加: :new.字段名
更新::old.字段名,:new.字段名
ü 删除触发器:droptrigger索引名
ü 错误状态: raise_application_error(-20001,’提示’)
触发器写法:
createorreplacetrigger tri_table
beforeinsertordeleteorupdateon scott.emp
foreachrow
begin
case
when inserting then
dbms_output.put_line('这是添加'||:new.ENAME);
when deleting then
dbms_output.put_line('只是删除'||:old.ENAME);
when updating then
dbms_output.put_line(:old.ENAME||:old.ENAME);
endcase;
end;
l 自增id的写法
createorreplacetrigger tri_table_lll
beforeinsertordeleteorupdateon lll
foreachrow
begin
case
when inserting then
select id_identity.nextvalinto :new.id from dual;
when deleting then
dbms_output.put_line('只是删除'||:old.ENAME);
when updating then
dbms_output.put_line(''||:old.ENAME||:old.ENAME);
endcase;
end;
l 调用自增:
insert into lll(ename,sal) values('lmy',45);要指明添加的字段
l 事物的四大特性
原子性,一致性,隔离性,持久性
l 保存点(commit执行前的定点回滚)
Savepoint 保存点名
Rollback to 保存点名
l 事物事例:银行转账模拟
createorreplaceprocedure proc_zz(moneint,zname nvarchar2,xname nvarchar2)
is
pemp int:=0;
begin
--转出账号
update scott.emp set sal=sal-mone where ename=zname;
pemp:= pemp+sql%rowcount;
--转入账号
update scott.emp set sal=sal+mone where ename=xname;
pemp:=pemp+sql%rowcount;
--pemp:=pemp/10;
if pemp <2then
dbms_output.put_line('转账失败!');
rollback;
else
dbms_output.put_line('转账成功!');
commit;
endif;
exception
whenothersthen
begin
dbms_output.put_line('转账过程中出现问题!');
rollback;
end;
end;
调用存储
begin
proc_zz(1000,'SCOTT','KING');
end;
自定义报错
--自定义异常
declare ptempint:=0;
exp1 exception;
exp2 exception;
begin
if ptemp=0then
raise exp1;
else
raise exp2;
endif;
exception
when exp1 then
dbms_output.put_line('出现了不可预计的错误哦...');
when exp2 then
dbms_output.put_line('出现了,传说中的报错了哦...');
whenothersthen
begin
dbms_output.put_line('出现了一个小小的错误哦...');
end;
end;
Ø 表的备份(导入与导出):必须将导出的表放在oracle bin文件夹下面
u 导出
exp userid=cz/123456@orcl tables=(emp)file=E:\A.DMP
exp userid=登陆用户名/密码@orcltables=(表名(多张表用逗号隔开)) file=E:\名.DMP
导入
Imp userid=cz/123456@orclfile=E:\A.DMP
Imp userid=登陆用户名/密码@orclfile=E:\名.DMP
表未被删除导入时需要接: ignore=y
包头:不是具体的实现
createorreplacepackage dmbs_outputm
is
functionput_line(pnvarchar2) returnnvarchar2;
functionput_line(pnvarchar2,p2 nvarchar2) return nvarchar2;
end dmbs_outputm;
包体
createorreplacepackagebody dmbs_outputget
is
function put_line(p nvarchar2)
returnnvarchar2
is
begin
return p;
end;
function put_line(p nvarchar2,p2 nvarchar2)
return nvarchar2
is
begin
return p||p2;
end;
end dmbs_outputget;
包头与包体必须连续创建
- 游标,循环,触发器....
- 触发器、游标
- 存储过程,触发器,游标,if语句,三种循环
- 循环游标
- 使用游标的触发器
- 游标 触发器 笔记
- 触发器和游标
- sql 触发器和游标
- 游标和触发器
- 游标,存储过程,触发器
- 触发器中使用游标
- 触发器+游标的应用
- sql游标,触发器
- 使用游标与触发器
- 包、游标、触发器
- 游标和触发器
- 范式、游标、触发器
- 在触发器中使用游标
- java程序中注册系统级热键 jintellitype
- 浅谈 MVP in Android
- 目前要做的几件事 定主基调
- Linux搭建高并发高可用Redis集群
- MySQL5.7 RPM方式安装后root用户不能启动及不能远程连接mysql的问题
- 游标,循环,触发器....
- Oracle 11g通过提高IO吞吐量(修改_db_file_optimizer_read_count)来优化全表扫描
- C语言冒泡排序
- Ruby的历史~
- Spring Data Rest遇到复合主键
- Android PorterDuff.Mode 的介绍
- Hibernate中createCriteria即QBC查询的详细用法和HQL的区别?
- 【剧透】2017云栖大会•北京峰会——企业云上业务优化专场
- disconf配置项获取不到值