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

来源:互联网 发布:c语言 设备端接入 编辑:程序博客网 时间:2024/05/29 18:03
事务
  事务(Transaction)是作为单个逻辑工作单位执行的一系列操作
  多个操作作为一个整体向系统提交,要么都执行、要么都不执行
  事务是一个不可分割的工作逻辑单元

事务的特性
  事务必须具备以下四个属性,简称ACID属性
  原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子性);
要么都执行,要么都不执行
一致性(Consistency):当事务完成时,数据必须处于一致状态
隔离性(Isolation):并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
永久性(Durability):事务完成后,它对数据库的修改被永久保持
存储过程
预先存储好的SQL程序
保存在Oracle中
通过名称和参数执行
可带参数,也可返回结果
可包含数据操纵语句、变量、逻辑控制语句等
优点:
执行速度更快
减少网络流通量
创建存储过程:
存储过程之创建无参存储过程
--无参的存储过程create or replace PROCEDURE hello_proasbegin  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)asbegin  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)asbegin  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 numberas 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 NUMBERasBEGIN  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$