首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编写一个PLSQL块,如果部门表中没有可用于emp表中的dept_id的记录,则会抛出异常。

PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等数据库对象。下面是一个编写的PL/SQL块,用于检查部门表中是否存在可用于emp表中的dept_id的记录:

代码语言:txt
复制
DECLARE
  v_dept_id departments.dept_id%TYPE;
BEGIN
  -- 获取emp表中的dept_id
  SELECT dept_id INTO v_dept_id FROM emp WHERE ROWNUM = 1;

  -- 检查部门表中是否存在可用于emp表中的dept_id的记录
  SELECT COUNT(*) INTO v_count FROM departments WHERE dept_id = v_dept_id;

  -- 如果不存在记录,则抛出异常
  IF v_count = 0 THEN
    RAISE_APPLICATION_ERROR(-20001, 'No record found in departments table for dept_id ' || v_dept_id);
  END IF;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    RAISE_APPLICATION_ERROR(-20002, 'No record found in emp table');
END;
/

在上述代码中,首先声明了一个变量v_dept_id,用于存储从emp表中获取的dept_id。然后通过SELECT语句从emp表中获取一条记录的dept_id,并将其赋值给v_dept_id。接着,使用SELECT COUNT(*)语句检查departments表中是否存在与v_dept_id相等的dept_id记录,并将结果存储在变量v_count中。最后,通过IF语句判断v_count的值,如果为0,则表示部门表中不存在可用于emp表中的dept_id的记录,此时使用RAISE_APPLICATION_ERROR抛出自定义异常。

这个PL/SQL块可以用于在部门表和员工表之间建立外键关系,确保emp表中的dept_id始终存在于departments表中。如果部门表中没有可用于emp表中的dept_id的记录,就会抛出异常,提醒开发人员进行处理。

腾讯云相关产品和产品介绍链接地址:

  • PL/SQL开发工具:https://cloud.tencent.com/product/plsql
  • 云数据库 MySQL:https://cloud.tencent.com/product/cdb_for_mysql
  • 云数据库 PostgreSQL:https://cloud.tencent.com/product/cdb_for_postgresql
  • 云数据库 SQL Server:https://cloud.tencent.com/product/cdb_for_sqlserver
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Oracle总结【PLSQL学习】

错误提示,直接了当 (5)SQL强调结果 PLSQL是什么 是专用于Oracle服务器,在SQL基础之上,添加了一些过程化控制语句,叫PLSQL 过程化包括有:类型定义,判断,循环,游标,异常或例外处理...dbms_output.put_line('hello 你好'); end; / 注意: dbms_output是oracle一个输出对象 put_line是上述对象一个方法,用于输出一个字符串自动换行...语法已经知道,有一个exception,这个在Oracle称为例外,我们也可以简单看成就是Java异常。。。...-- 遍历每一行记录 [FOR EACH ROW] PLSQL 【declare…begin…end;/】 ?...这里写图片描述 ---- 星期一到星期五,且9-20点能向数据库emp插入数据,否则使用函数抛出异常, 语法:raise_application_error('-20000','例外原因') CREATE

2.4K70

PLSQL 编程(二)游标、存储过程、函数

可以将游标形象看成一个变动光标,他实质上是一个指针,在一段Oracle存放数据查询结果集或者数据操作结果集内存,这个指针可以指向结果集任何一条记录。...PL/SQL 程序不能用OPEN 语句重复打开一个游标。 l 提取游标数据:就是检索结果集合数据行,放入指定输出变量。 ...l 对该记录进行处理; l 继续处理,直到活动集合没有记录; l 关闭游标:当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用系统资源,并使该游标的工作区变成无效,不能再使用FETCH...--删除EMPLOYEES部门所有员工,如果部门没有员工,则在DEPARTMENT删除该部门。...简单来时是存储在数据库服务器封装了一段或多段sql语句plsql代码。存储过程可以在编程语言中调用,如Java等。 存储过程优点: 简化复杂操作,封装。

3.8K71
  • Oracle数据库之第四篇

    ; end; /* 错误信息开发异常 数据库叫做 例外 异常分类 1.系统异常 系统定义好异常 2.自定义异常 new...:使用游标查询部门员工信息 如果部门没有员工 报错提示 需要自定义异常 变量名 exception --声明自定义异常 */ declare...emp_cursor into emp_row; if emp_cursor%notfound then --没有员工 抛出错误异常 raise no_dept_emp;...,可以调用函数 90%情况下 函数和过程通用 过程可以调用函数,函数同样可以调用过程 */ /* 触发器 是一个监视器,监视对表数据操作 如果对数据操作满足触发器执行条件...原始记录 原始记录 */ --创建触发器监视如果中有数据插入,输出一个欢迎语句 create or replace trigger insert_trigger after

    94010

    笔记29-MySQL多表&事务

    (id) -- 外键,关联部门(部门主键) ); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孙悟空','男',...* 例子: -- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称 SELECT t1.*,t2....事务隔离级别(了解) * 概念:多个事务之间隔离,相互独立。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同隔离级别就可以解决这些问题。 * 存在问题: 1....脏读:一个事务,读取到另一个事务没有提交数据 2. 不可重复读(虚读):在同一个事务,两次读取到数据不一样。 3....幻读:一个事务操作(DML)数据中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己修改。

    23330

    Mysql使用指南

    修改数据: update 名 set 列名1 = 值1, 列名2 = 值2,... [where 条件]; 注意: 如果不加任何条件,则会中所有记录全部修改。...含义:非空且唯一 一张只能有一个字段为主键 主键就是记录唯一标识 1....例子: -- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称 SELECT t1. , t2....但是如果多个事务操作同一批数据,则会引发一些问题,设置不同隔离级别就可以解决这些问题。 存在问题: 脏读:一个事务,读取到另一个事务没有提交数据。...不可重复读(虚读):在同一个事务,两次读取到数据不一样。 幻读:一个事务操作(DML)数据中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己修改。

    1.1K20

    数据库-多表查询-连接查询

    外连接(Mysql支持:左外连接 、右外连接) 外连接分类 左外连接 左中所有的记录都出现在结果,并上右与之对应部分, 如果没有匹配记录,使用NULL填充 右外连接 右中所有的记录都出现在结果...,并上左与之对应部分, 如果没有对应记录,使用NULL填充 语法 -- 左外连接 select 列名 from 左 left join 右 on 从.外键=主表.主键 -- 右外连接...select 列名 from 左 right join 右 on 从.外键=主表.主键 应用 左外连接 需求:查询所有的部门,以及该部门下面的员工 -- 添加一个销售部,暂时还没有员工 insert...使用左外连接查询: 可以看到能够查询出 【销售部】 -- 左中所有的记录都出现在结果,并上右与之对应部分, 如果没有匹配记录,使用NULL填充 mysql> select * from...使用右外连接查询: 基于右连接查询,不管 emp 数据有没有关联 dept_id, 也可以查询出右所有数据 mysql> select * from dept d right join emp

    13.5K20

    4-约束

    1.概述 概念:约束是作用于字段上规则,用于限制存储在数据。 目的:保证数据库数据正确、有效性和完整性。...分类: 注意:约束是作用于字段上,可以在创建/修改时候添加约束。 2. 约束演示 案例需求: 根据需求,完成结构创建。...我们来看一个例子: 左侧 emp 是员工,里面存储员工基本信息,包含员工 ID、姓名、年龄、职位、薪资、入职日 期、上级主管 ID、部门 ID,在员工信息存储部门 ID dept_id...,而这个部门 ID 是关联 部门 dept 主键 id,那 emp dept_id 就是外键,关联是另一张主键。...id 为 1 部门,而在 emp 还有很多员 工,关联为 id 为 1 部门,此时就出现了数据不完整性。

    11910

    MySQL——函数与约束讲解

    约束 1.概述 概念:约束是作用于字段上规则,用于限制存储在数据。 目的:保证数据库数据正确、有效性和完整性。...我们来看一个例子: 左侧 emp 是员工,里面存储员工基本信息,包含员工 ID 、姓名、年龄、职位、薪资、入职日期、上级主管 ID 、部门 ID ,在员工信息存储部门 ID...dept_id ,而这个部门 ID 是关联 部门 dept 主键 id ,那 emp dept_id 就是外键 , 关联是另一张主键。...修改父 id 为 1 记录,将 id 修改为6 我们发现,原来在子表dept_id值为1记录,现在也变为6了,这就是cascade级联效果。...我们发现父记录是可以正常删除,父数据删除之后,再打开子表 emp ,我们发现子表 emp dept_id 字段,原来 dept_id 为 1 数据,现在都被置为 NULL 了。

    24020

    MySql基础

    删除所有员工 delete from employee; 注意事项: • DELETE 语句条件可以有,也可以没有如果没有条件,则会删除整张所有数据。...约束 **4.1 概述 ** 概念:约束是作用于字段上规则,用于限制存储在数据。 目的:保证数据库数据正确、有效性和完整性。...我们来看一个例子: 左侧emp是员工,里面存储员工基本信息,包含员工ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工信息存储部门ID dept_id,而这个部门...: 此时,我们看到查询结果包含了大量结果集,总共102条记录,而这其实就是员工emp所有的记录(17) 与 部门dept所有记录(6) 所有组合情况,这种现象称之为笛卡尔积。...查询所有年龄大于40岁员工, 及其归属部门名称; 如果员工没有分配部门, 也需要展示出 来(外连接) : emp , dept 连接条件: emp.dept_id = dept.id select

    35021

    PLSQL --> 异常处理(Exception)

    Exception是一种PL/SQL标识符,当运行PL/SQL出现错误或警告,则会触发异常处理。...为了提高程序健壮性,可以在PL/SQL引 入异常处理部分,进行捕捉异常,并根据异常出现情况进行相应处理。 一、异常类型 ORACLE异常分为两种类型:系统异常、自定义异常。...时,没有找到数据 DUL_VAL_ON_INDEX 试图在一个有惟一性约束列上存储重复值 CURSOR_ALREADY_OPEN 试图打开一个已经打开游标 TOO_MANY_ROWS SELECT...--下面的例子如果插入工资少于,就抛出异常 DECLARE v_sal emp.sal%TYPE; v_id emp.empno%TYPE; e_sal EXCEPTION; --定义异常...该函数用于在PL/SQL定义错误消息,且只能在数据库端子程序中使用(存储过程、函数、包、触发器),不能在匿名和客户端 子程序中使用 使用方法 RAISE_APPLICATION_ERROR

    1.6K10

    Oracle-PLSQL基础

    要完成相对简单应用功能,可能只需要编写一个pl/sql;但是如果想要实现复杂功能,可能需要在一个pl/sql嵌套其他pl/sql。...---- 第一个PL/SQL程序 PLSQL命令窗口 SQL> set serveroutput on ;--打开输出 SQL> declare --定义部分 ,如果没有定义,declare...---- 游标 游标的概念 游标(游标):一个结果集 不能把一个集合赋值给一个基本型变量,否则会抛出 too many rows异常带参数 ,可不带参数。 ---- 游标的语法 ?...'); --删除指定雇员;如果部门没有雇员,则删除部门 DELETE FROM employees WHERE department_id=v_deptno; IF...; begin open c_emp; --获取一条记录 fetch c_emp into p_ename; --如果没有查到则抛出自定义例外 if c_emp%notfound

    1.8K20

    MySQL基础课堂笔记「建议收藏」

    如果不加任何条件,则会中所有记录全部修改。 DQL:查询记录 * select * from 名; 1....一张只能有一个字段为主键 3. 主键就是记录唯一标识 2....码:如果在一张一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该码 例如:该码为:(学号,课程名称) * 主属性:码属性组所有属性 *...* 例子: -- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称 SELECT t1.*,t2....脏读:一个事务,读取到另一个事务没有提交数据 2. 不可重复读(虚读):在同一个事务,两次读取到数据不一样。 3.

    93931

    MySQL基础之多表查询

    (多对一) 多对多 一对一 1.1 一对多 案例: 部门 与 员工关系 关系: 一个部门对应多个员工,一个员工对应一个部门 实现: 在多一方建立外键,指向一一方主键 1.2 多对多...关系: 一对一关系,多用于拆分,将一张基础字段放在一张,其他详情字段放在另一张,以提升操作效率 实现: 在任意一方加入外键,关联另外一方主键,并且设置外键为唯一(UNIQUE)...: 此时,我们看到查询结果包含了大量结果集,总共102条记录,而这其实就是员工emp所有的记录 (17) 与 部门dept所有记录(6) 所有组合情况,这种现象称之为笛卡尔积。...select * from emp , dept where emp.dept_id = dept.id; 而由于id为17员工,没有dept_id字段值,所以在多表查询时,根据连接查询条件并没有查询到...emp , 如果员工没有领导, 也需要查询出来 结构: emp a , emp b select a.name '员工', b.name '领导' from emp a left join emp

    61220

    JAVASQL查询语句大全,select多表查询,各种查询

    select * from emp; – 查询emp所有员工姓名、薪资、奖金 select name,sal,bonus from emp; – 查询emp所有部门, 剔除重复记录,...; 上面的查询(inner join…on…)方式也叫做内连接查询 外连接查询 1.左外连接查询 显示左侧所有记录如果在右侧没有对应记录,则显示为null 语法: select ....emp e on d.id=e.dept_id; 以上结果会显示(左侧)所有部门如果部门没有员工,(右侧)则显示为null 2....右外连接查询 显示右侧所有记录如果在左侧没有对应记录,则显示为null 语法: select ... from a right join b on(a.id=b.xid) – 查询部门和所有员工...,如果员工没有所属部门,显示null select * from dept d right join emp e on d.id=e.dept_id; 以上结果会显示(右侧)所有员工,如果员工没有所属部门

    2.2K30

    多表连接查询

    在关系数据库管理系统建立时各数据之间关系不必确定,常把一个实体所有信息存放在一个。当检索数据时,通过连接操作查询出存放在多个不同实体信息。...比如: 有一个部门,有一个员工,我想查询某部门所有员工信息。这时我们要先找出部门ID,通过部门ID查询出对应员工信息。 这样我们在查询我们需要信息时候就应用了多表。...join…on,outer 可以省略 格式: select */字段列表 from 左 left [outer] join 右 on 条件表达式; 用左边记录去匹配右边记录如果符合条件则显示...;否则,显示 NULL 案例: 在部门增加一个部门 mysql> insert into dept(name) values('执行部'); Query OK, 1 rows affected (0.08...join…on,outer 可以省略 格式: select */字段列表 from 左 right [outer] join 右 on 条件表达式; 用右边记录去匹配左边记录如果符合条件则显示

    1.5K20

    Oracle触发器-imooc

    每当一个特定数据操作语句(insert update delete)在指定上发出时,Oracle自动执行触发器定义语句序列。...,它是单独名字空间,因而触发器名可以和或过程有相同名字,但在一个模式触发器名不能相同。...;     end if; end; raise_application_error(error_number,message[,[truefalse]]); 用于plsql使用程序自定义错误消息...其中 error_number用于定义错误码,必须在-20000到-20999之间负整数; message用于指定错误消息,并且该消息长度无法超过2048字节; 该异常只好在数据库端子程序(流程...其他 建立一个触发器, 当职工 emp 被删除一条记录时,把被删除记录写到职工删除日志中去 CREATE TABLE emp_delinfo AS SELECT * FROM EMP WHERE

    1.3K20

    MySQL扩展

    ) rt ); 再次执行SQL重复数据删除成功 select * from results_temp order by stu_no desc; 3、如果一张没有id自增主键,实现自定义一个序号...foreign key (dept_id) references departments_temp1_2(dept_id) on update cascade -- 更新部门数据,自动将所有关联外键数据...-- 当设置外键属性为级联置空时,更新部门数据,自动将所有关联外键数据,一并置空 update departments_temp2_2 set dept_id = 111 where dept_id...,department_id,hire_date from employees_temp12; -- 别名处理 -- 如果一个SQL语句结果集使用了别名处理,自动作用到连接后面结果集,但要单独写在后面就没有效果...INERT语句列上加上字段名,在数据库导入另一个数据库已有时非常有用 # -d 或 --no-data :忽略,不创建每个插入数据语句 # --where : 只转储给定WHERE条件选择记录

    1.9K30

    【MySQL数据库】多表关系与多表联合查询

    :最常见关系:学生对班级 , 员工对部门多对多关系:学生与课程 , 用户与角色一对一关系:使用较少,因为一对一关系可以合成为一张一对一 一个学生对应一个身份证号码 一对多一个部门可以有多名员工,但一个员工只能归于一个部门...返回数据类型单行单列:返回一个具体列内容,可以理解为一个单值数据;单行多列:返回一行数据多个列内容;多行单列:返回多行记录之中同一列内容,相当于给出了一个操作范围;多行多列:查询返回结果是一张临时...ALL表示指定列值必须要大于子查询集一个值,即必须要大于子查询集最大值;如果是小于号即小于子查询集最小值。同理可以推出其它比较运算符情况。...or c > result2 or c > result3...ININ关键字,用于判断某个记录值,是否在指定集合在IN关键字前边加上not可以将条件反过来select …from …where...有数据结果”(至少返回一行数据), 则该EXISTS() 结果为“true”,外层查询执行该子查询如果没有数据结果”(没有任何数据返回),则该EXISTS()结果为“false”,外层查询不执行EXISTS

    3K30
    领券