星球的眼睛 发表于 2024-9-24 10:28:06

从查询到操作:PL/SQL中访问数据库

https://i-blog.csdnimg.cn/direct/a6bfc70ae2564fe4af04be7823b38a11.png
1. PL/SQL如何访问数据库

在PL/SQL块中的重要目的是对数据库进行访问。在PL/SQL块中,可以包含各种SQL语句,例如SELECT语句用于查询数据,DML(Data Manipulation Language)语句用于插入、更新或删除数据,DCL(Data Control Language)语句用于权限管理等。但是,在PL/SQL块中,不能直接包含DDL(Data Definition Language)语句,如创建表、修改表结构等。这类操作需要通过其他方法实现。
由于PL/SQL块通常在应用程序中调用实行,而不是交互式实行,因此在PL/SQL块中的SQL语句与一样平常的SQL语句略有不同。
举例:

假设你在应用程序中需要通过PL/SQL块查询数据库中的员工信息,并对其进行某些处理,这样的SQL查询语句需要写在PL/SQL块中。具体操作可以参考后面的示例。
2. 如何对数据库进行查询

PL/SQL块中使用SELECT语句从数据库中检索数据。SELECT语句的格式与普通的SQL语句基本相同,但在PL/SQL中,查询的结果通常会存放到一个或多个变量中,以便后续处理。
PL/SQL块中SELECT语句的格式:
SELECT 列1, 列2... INTO 变量1, 变量2... FROM 表
SELECT语句中的INTO子句用于将查询到的数据存储在PL/SQL块中的变量中。
举例:

【示例7-13】通过SELECT INTO把查询到的数据存放在变量中并进行处理。
假设需要从部门表(dept)中查询部门编号为30的部门名称和地址信息,并从员工表(emp)中查询该部门中员工的工资和奖金总和。查询结果会存储在PL/SQL块的变量中,并最终打印出来。具体代码如下:
SET SERVEROUTPUT ON;
DECLARE
    dno integer;
    d_name dept.dname%type;
    d_location dept.loc%type;
    total_sal number;
    total_comm number;
BEGIN
    dno := 30;
    SELECT dname, loc INTO d_name, d_location FROM dept WHERE deptno = dno;
    dbms_output.put_line('名称: ' || d_name || ' 位置: ' || d_location);
    SELECT sum(sal), sum(nvl(comm, 0)) INTO total_sal, total_comm FROM emp WHERE deptno = dno;
    dbms_output.put_line('工资总和: ' || total_sal || ' 奖金总和: ' || total_comm);
END;
/
结果: 将会输出部门30的名称、位置以及该部门员工的工资和奖金总和。
3. 如何使用DML语句

PL/SQL块中可以包含INSERT、DELETE、UPDATE语句,这些语句用于对数据库中的表进行操作。例如,插入新行、删除行或更新行。在使用这些语句时,可以结合PL/SQL中的变量或记录类型来实现更机动的数据操作。
举例:

【示例7-14】在dept表中插入两行记录。
下面的示例代码演示了如何通过PL/SQL块向dept表中插入两条新记录。第一条记录直接插入常量,第二条记录使用变量插入数据:
SET SERVEROUTPUT ON;
DECLARE
    dno integer;
    d_name dept.dname%type;
    d_location dept.loc%type;
BEGIN
    -- 插入第一条记录,直接使用常量值
    INSERT INTO dept(DEPTNO, DNAME, LOC) VALUES(80, 'NETWORK', 'NOWHERE');
   
    -- 使用变量插入第二条记录
    dno := 90;
    d_name := 'DEVELOP';
    d_location := 'NOWHERE';
    INSERT INTO dept(DEPTNO, DNAME, LOC) VALUES(dno, d_name, d_location);
    commit;
END;
/
结果: 这段代码会向表dept中插入两行数据,一行是常量数据,另一行是通过变量插入的数据。
4. 处理查询结果的异常情况

内容表明:

在实行SELECT语句时,大概会遇到两种异常情况:第一种是查询没有返回符合条件的数据,第二种是返回了多行数据。这种情况在PL/SQL中被称为异常处理,Oracle提供了一些预界说的异常,如NO_DATA_FOUND用于处理没有数据返回的情况。
举例:

假设在查询部门时,如果没有找到对应的部门,PL/SQL块需要处理这个异常并给出提示。可以通过如下代码实现:
BEGIN
    -- 尝试查询一个不存在的部门
    SELECT dname, loc INTO d_name, d_location FROM dept WHERE deptno = 999;
    dbms_output.put_line('名称: ' || d_name || ' 位置: ' || d_location);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
      dbms_output.put_line('没有找到符合条件的部门');
END;
/
结果: 当查询条件不满足时,会输出提示信息“没有找到符合条件的部门”。
5. 使用记录类型来简化代码

为了简化代码,在PL/SQL块中可以界说记录类型变量,将多个字段的值存储在一个记录类型变量中。这样可以减少单独界说多个变量的复杂性,并且操作起来更加简洁。
举例:

【示例7-15】在使用PL/SQL进行数据插入时,使用记录类型来简化代码。
例如,插入一条部门记录,包含部门编号、名称和地址。可以使用记录类型来界说这些字段,然后一次性插入:
SET SERVEROUTPUT ON;
DECLARE
    TYPE department IS RECORD (d_no integer, d_name dept.dname%type, d_location dept.loc%type);
    depart department;
BEGIN
    depart.d_no := 1;
    depart.d_name := 'MAINTAIN';
    depart.d_location := 'NOWHERE';
    INSERT INTO dept(deptno, dname, loc) VALUES(depart.d_no, depart.d_name, depart.d_location);
    commit;
END;
/
非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。
https://i-blog.csdnimg.cn/blog_migrate/ff031dd124d1de976ce1a2559666df6e.jpeg
无论你是AI新手还是AI专家,学习最前沿的AI技术,AI创富俱乐部你值得拥有!
https://i-blog.csdnimg.cn/blog_migrate/50e751fe3a193d7495f44c0785d55fde.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 从查询到操作:PL/SQL中访问数据库