oracle-day04

-- 异常
-- 唯一行约束异常
declare
begin
  insert into dept values(10,'开发部','6楼');
  exception
    when dup_val_on_index then
      dbms_output.put_line('破坏主键约束');
 end;
 
-- 自定义异常
declare
  no_delete_data exception; --声明变量属于异常类型
begin
  delete from dept where deptno=50;
  if sql%notfound then-- 隐含游标 
    raise no_delete_data;-- raise 抛出异常
  end if;
   dbms_output.put_line('正常删除数据');
  exception --处理异常
    when no_delete_data then
       dbms_output.put_line('删除数据不存在');
end;

-- 事物 commit,rollback
begin 
  insert into dept values(1,'aaa','aa');
  insert into dept values(1,'bbb','bb');
  insert into dept values(3,'ccc','cc');
  insert into dept values(4,'ddd','dd');
  commit;
  exception 
    when dup_val_on_index then
      rollback; 
end;
-- 事物 savepoint,rollback to
begin 
  insert into dept values(1,'aaa','aa');
  savepoint pointA;-- 保存回滚点
  insert into dept values(1,'bbb','bb');
  insert into dept values(3,'ccc','cc');
  rollback to pointA;--回滚到回滚点
  insert into dept values(4,'ddd','dd');
end;
-- 死锁    A窗口
update dept set dname='aaa' where deptno=10;

update dept set dname='bbb' where deptno=20;--2

--B窗口
update dept set dname='aaa' where deptno=10;--1

update dept set dname='bbb' where deptno=20;--3
-------------------------------------------------------

--存储过程
--无参存储过程
create procedure pro_query_dept_bydno --存储过程名称
as 
--声明部分
t_dname dept.dname%type;
begin
  select dname into t_dname from dept where deptno=10;
  dbms_output.put_line('部门名称'||t_dname);
exception 
  when no_data_found then
     dbms_output.put_line('部门不存在');
end; 

--调用存储过程方法一
begin 
  pro_query_dept_bydno();
end;
--方法二 
call  pro_query_dept_bydno();

-- 方法三 在命令行调用
exec pro_query_dept_bydno();


-- 带有入参和出参的存储过程
create procedure pro_query_ename_byeno(v_empno in number,v_ename out varchar2)
as --in 入参 out 出参
begin
  select ename into v_ename from emp where empno=v_empno;
exception
  when no_data_found then
     dbms_output.put_line('工号'||v_empno||'不存在');
end;
-- 测试  
declare
t_ename emp.ename%type;
begin
  pro_query_ename_byeno(7369,t_ename);
  dbms_output.put_line(t_ename);
end;
  --------------------------------------------------

-- 动态添加数据 loop循环
create procedure pro_batch_add_dept(v_start number)
as 
t_start number(2);-- v_start输入值不能算数运算操作
t_end number(2);
begin
  t_start:=v_start;
  t_end:=t_start+3;
  loop
    if t_start>t_end then
      exit;
    end if;
    insert into dept values(t_start,'开发'||t_start||'部',t_start||'楼');
    t_start:=t_start+1;
  end loop;
end;
  
-- 动态添加数据 loop循环 带while
create procedure pro_batch_add_dept1(v_start number)
as 
t_start number(2);-- v_start输入值不能算数运算操作
t_end number(2);
begin
  t_start:=v_start;
  t_end:=t_start+3;

  while t_start <= t_end loop
     insert into dept values(t_start,'开发'||t_start||'部',t_start||'楼');
     t_start:=t_start+1;
   end loop;
end;

-- 动态添加数据 loop循环 带for
create procedure pro_batch_add_dept2(v_start number)
as 
t_start number(2);-- v_start输入值不能算数运算操作
t_end number(2);
begin
  t_start:=v_start;
  t_end:=t_start+3;

  for i in t_start..t_end loop
     insert into dept values(i,'开发'||i||'部',i||'楼');   
   end loop;
end;
 ------------------------------------------------------

  -- 函数
  create or replace function fun_query_ename_byeno(v_empno emp.empno%type)
  return varchar2 -- 返回值类型
 is
  t_ename emp.ename%type;
begin
  select ename into t_ename from emp where empno = v_empno;
  return t_ename;
exception
  when no_data_found then
    return '编号为' || v_empno || '员工不存在';
end;

  -- 测试上面代码
  declare t_ename varchar2(200);
begin
  t_ename := fun_query_ename_byeno(7777); dbms_output.put_line(t_ename);end;

  -- 函数(带出参)
  create or replace function fun_query_ename_byeno1(v_empno emp.empno%type, v_job out emp.job%type) return varchar2 -- 返回值类型
 is
  t_ename emp.ename%type;
begin
  select ename, job into t_ename, v_job from emp where empno = v_empno; return t_ename;
exception
  when no_data_found then return '编号为' || v_empno || '员工不存在';
end;

  -- 测试
  declare t_ename varchar2(200); t_job emp.job%type;
begin
  t_ename := fun_query_ename_byeno1(7777, t_job); if t_job is
  null then dbms_output.put_line(t_ename); else dbms_output.put_line('姓名:' || t_ename || '   职位:' || t_job);
end if;
end;
 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值