Oracle 事物与游标

如何创建函数

例:
--添加函数
create or replace function car_add_func
(car car%rowtype)
return NUMBER
as
BEGIN
INSERT Into car values(car_seq.nextval,car.type,car.price,car.create_date,car.exhaust);
COMMIT;
return 1;
EXCEPTION
when OTHERS then rollback;
dbms_output.put_line('添加失败');
return 0;
END;
--调用函数
set serveroutput on;
exec car_add_pro('福特蒙迪欧','2.0T',200000.00,'1-1月 -15');

declare car_ car%rowtype;
begin
car_.type:='JEEP自由光';
car_.price:=250000.00;
car_.create_date:='25-9月 17';
car_.exhaust:='2.5T';
dbms_output.put_line('影响行数是'||car_add_func(car_));
end;


视图的特点
是一个数据库中虚拟的表
经过查询操作形成的结果
具有普通表的结构
不能实现数据的存储
对视图的修改将会影响实际的数据表
--添加视图
create or replace view emp_dept_view
as select * from emp NATURAL JOIN dept;

--删除视图
drop view emp_dept_view;


同义词 公共同义词
例:
SELECT * FROM sys.access$
select * from all_tables where table_name='DUAL'
--创建同义词
create SYNONYM access_ for sys.access$
--使用同义词
select * from access_
select * from sys.aw$
--创建公共同义词
create public synonym aw_ for sys.aw$
--使用同义词
select * from aw_
--删除同义词
drop synonym access_
--删除公共同义词
drop public synonym aw_


游标
游标用来处理从数据库中检索的多行记录(使用select语句)。利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集

游标的分类
静态游标:结果集已经确定
1.隐式游标:所有的dml语句为隐式游标
2.显示游标:用户显示声明
动态游标

游标的声明


例:
set serveroutput on;
--查询所有的员工信息,并打印信息
declare
CURSOR emp_info is select * from emp;
emp_ emp%rowtype;
begin
open emp_info;--打开游标
loop
fetch emp_info into emp_;--把游标数据(结果集)放入到变量中
exit when emp_info%notfound;--当不存在下一条数据时就结束循环
dbms_output.put_line('员工编号是'||emp_.empno||',员工姓名是'||emp_.ename||',基本工资是'||emp_.sal);
end loop;
close emp_info;--关闭游标
end;

declare
cursor emp_info is select * from emp;
emp_ emp%rowtype;
begin
for emp_ in emp_info loop
dbms_output.put_line('员工编号是'||emp_.empno||',员工姓名是'||emp_.ename||',基本工资是'||emp_.sal);
end loop;
end;

游标的属性:


例:
set serveroutput on;
declare
CURSOR emp_info is select * from emp;
emp_ emp%rowtype;
begin
if emp_info%isopen -- 判断游标是否打开
then dbms_output.put_line('游标已打开');
else
open emp_info;
end if;
loop
fetch emp_info into emp_;
exit when emp_info%notfound;
dbms_output.put_line(emp_.empno);
end loop;
close emp_info;
end;

例:
--编写一个PL/SQL程序块,对名字以‘A’或‘S’开始的所有雇员按他们的基本薪水(sal)的10%给他们加薪(对emp1表进行修改操作)
create table emp1 as select * from emp;--把一张表的数据备份到新表中

set serveroutput on;
declare
cursor e_cur is select * from emp where ename like 'A%' or ename like 'S%' ;
emp_ emp%rowtype;
begin
for emp_ in e_cur loop
emp_.sal:=emp_.sal*1.1;
update emp1 set sal=emp_.sal where empno=emp_.empno;
end loop;
commit;
exception
WHEN others then rollback;
end;
);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值