您的位置:首页 > 数据库

数据库中事务、存储过程、函数、同义词的使用

2017-10-07 10:43 459 查看
事务
  事务(Transaction)是作为单个逻辑工作单位执行的一系列操作
  多个操作作为一个整体向系统提交,要么都执行、要么都不执行
  事务是一个不可分割的工作逻辑单元



事务的特性
  事务必须具备以下四个属性,简称ACID属性
  原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子性);
要么都执行,要么都不执行
一致性(Consistency):当事务完成时,数据必须处于一致状态
隔离性(Isolation):并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
永久性(Durability):事务完成后,它对数据库的修改被永久保持
存储过程

预先存储好的SQL程序
保存在Oracle中
通过名称和参数执行
可带参数,也可返回结果
可包含数据操纵语句、变量、逻辑控制语句等
优点:
执行速度更快
减少网络流通量
创建存储过程:



存储过程之创建无参存储过程
--无参的存储过程
create or replace PROCEDURE hello_pro
as
begin
dbms_output.put_line('Hello Procedure');
end;
测试代码:
set serveroutput on;
begin
hello_pro;
end;
存储过程之创建有参存储过程
--1.参数的数据类型不能加长度
--2.不加IN或out 默认为IN,即输入参数
--3.调用带有参数的存储过程必须要传参
create or replace PROCEDURE with_param_pro(str in VARCHAR2)
as
begin
dbms_output.put_line( str);
end;
存储过程相关实例1:
--在emp表空间中创建存储过程,接收编号,参数类型与emp表中相同,执行存储过程能够打印姓名及工资
create or replace procedure emp_print_pro(eno emp.empno%type)
as
emp_ emp%rowtype;
begin
select * into emp_ from emp where empno=eno;
dbms_output.put_line('员工的姓名是'||emp_.ename||',基本工资是'||emp_.sal);
end;
实例2:增加一个汽车的类型,数量、价格、生产年份
--存储过程方法
create or replace PROCEDURE add_car(car_type VARCHAR2,car_num VARCHAR2,car_price NUMBER,car_year VARCHAR2)
as
begin
insert into car values(car_seq.nextval,car_type,car_num,car_price,car_year);
commit;
dbms_output.put_line('数据存储成功');
EXCEPTION
when OTHERS then dbms_output.put_line('数据存储失败');
END ;
测试代码:
set serveroutput on;
exec add_car('福田','55',12000,'1995年')
函数




函数相关应用实例1:计算两数之和
--计算两数之和
create or replace FUNCTION num_func
(num1 in number,num2 in NUMBER)
RETURN number
as BEGIN
RETURN  num1+ num2;
exception
when others then dbms_output.put_line('计算失败');
end;
测试代码:
select num_func(12,13) from dual;
应用实例2:将存储过程中汽车的实例用函数方法
--函数方法
create or replace function car_add_func
(car car%rowtype)
return NUMBER
as
BEGIN
INSERT Into car values(car_seq.nextval,car.ctype,car.num,car.price,car.year);
COMMIT;
return 1;
EXCEPTION
when OTHERS then rollback;
dbms_output.put_line('添加失败');
return 0;
END;
测试代码:
declare car_ car%rowtype;
begin
car_.ctype:='JEEP自由光';
car_.num:='2.5T';
car_.price:=250000.00;
car_.year:='25-9月 17';
dbms_output.put_line('影响行数是'||car_add_func(car_));
end;
同义词
--设置同义词可以把不属于本账号的表空间下的表共享,可以在其他表空间下进行操作
--公共同义词可以在任意表空间下操作
--同义词创建
create SYNONYM access_ for sys.access$
--删除
drop SYNONYM access_
--查询
select * from access_
--创建公共同义词
create public SYNONYM access_ for sys.access$
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐