事务的四大特性
原子性:要么全部成功,要么全部失败
一致性:数据库事务的操作要符合业务逻辑的要求
隔离性:多个事物之间不能像武侠英雄,必须是独立的
持久性:事物的操作应该是永久的
提交事务 commit; 回滚事务 rollback;
过程
语法:create [or replace] procedure 过程名字[(参数名1[参数出入参类型默认值in out inout] 参数类型,参数名2...)]
as/is
--变量声明部分
begin
--业务逻辑执行部分
exception(可省略)
--异常处理部分
end;
注意:
1,出参类型 默认值是in 入参 也就是调用过程传递过来的参数 out 出参 像java中返回的返回值 inout出入参
2,过程如果没有参数不能加()这和java中的方法不一样
3,过程中参数的类型不能有精度 varchar numver(5)
举例:
--创建过程 在控制台打印hellow world
create or replace procedure pro_hellowwolrd
as
begin
dbms_output.put_line('hellow world');
end;
--第一种方式
call pro_hellowwolrd();
--第二种方式
begin
pro_hellowwolrd();
end;
游标
显示游标
declare
--声明游标变量
cursor 游标变量名称 is sql查询语句;
begin
--打开游标
open 游标变量名称;
--葱油表中获取数据 一次fetch能够获取一行数据
fetch 游标变量名称 into 航类型或者记录类型的变量
--从变量中获取数据
exit when 游标变量名称%notfound ;
end loop;
--关闭游标
close 游标变量名称;
end;
举例:
declare
--声明游标变量
cursor cur_dept is select * from dept;
--声明行类型变量
v_dept dept%rowtype;
begin
--打开游标
open cur_dept;
loop
--从游标中获取数据
fetch cur_dept into v_dept;
--如果游标没有获取到数据 则跳出循环
exit when cur_dept%notfound;
--打印行类型变量中的内容
dbms_output.put_line('部门编号:'||v_dept.deptno||',部门名称'||v_dept.dname);
end loop;
--关闭游标
close cur_dept;
end;
参数游标
declare
--声明游标变量
cursor cur_emp(v_deptno number) is select * from emp where deptno=v_deptno;
--声明行类型变量
v_emp emp%rowtype;
begin
--打开游标
open cur_emp(10);
loop
--从游标中获取数据
fetch cur_emp into v_emp;
--如果游标没有获取到数据 则跳出循环
exit when cur_emp%notfound;
--打印行类型变量中的内容
dbms_output.put_line('员工编号:'||v_emp.empno||',员工名称'||v_emp.ename);
end loop;
--关闭游标
close cur_emp;
dbms_output.put_line('======');
--打开游标
open cur_emp(20);
loop
fetch cur_emp into v_emp;
exit when cur_emp%notfound;
dbms_output.put_line('员工编号:'||v_emp.empno||',员工名称:'||v_emp.ename);
end loop;
--关闭游标
close cur_emp;
end;
游标for循环
--游标for循环
begin
for v_dept in (select deptno,dname from dept)
loop
dbms_output.put_line('部门编号:'||v_dept.deptno||',部门名称:'||v_dept.dname);
end loop;
end;
隐含游标
--输入员工编号 删除员工信息 如果没有 删除成功 提示用户
declare
v_empno emp.empno%type:=&请输入员工编号;
begin
delete from emp where empno=v_empno;
if sql%notfound then
dbms_output.put_line('删除失败,您输入的员工编号不存在');
else
dbms_output.put_line('您成功删除'||sql%rowcount||'条数据');
end if;
end;