Oracle入门(十四.1)之PL / SQL简介

一、PL / SQL描述

程序语言扩展到SQL:
•允许将基本程序逻辑和控制流与SQL语句组合在一起。
•是Oracle专有编程语言。

- 它只能用于Oracle数据库或工具。


二、程序语言扩展到SQL

•是一种程序语言。
- 当遵循一系列指令时会产生结果。
•是3GL(第三代编程语言)。

- 它是一种“高级”编程语言。


三、结构化查询语言(SQL)描述

SQL:
•用于访问和修改关系数据库中数据的主要语言。
•是一种非过程性语言。
- 也称为“声明性语言”,它允许程序员专注于输入和输出而不是程序步骤。
•是4GL(第四代编程语言)。

- 比编程语言更接近自然语言的语言; 查询语言通常是4GL。

•是多种数据库(包括Oracle)的通用查询语言。
•由美国国家标准学会(ANSI)标准化。


四、SQL语句

显示的SQL语句非常简单直接。
但是,如果您想以传统方式更改任何检索到的数据(如果数据是xyz,请对此执行此操作),您会遇到SQL的局限性。
SELECT class_id, stu_id, final_numeric_grade, final_letter_grade
FROM enrollments;

例如,如何编写SQL语句来为不同类别的学生以不同字母等级更新final_letter_grade数据?


SQL的限制


显示更新最终字母等级数据的一个解决方案。 您需要为class_id = 1编写多少条SQL语句? 对于class_id = 2? 如果有20个班级呢?

UPDATE enrollments
SET final_letter_grade='A'
WHERE class_id=1 AND
Final_numeric_grade BETWEEN 66 and 75;

UPDATE enrollments
SET final_letter_grade='B'
WHERE class_id=1 AND
Final_numeric_grade between 56 and 65;

And so on…

一种解决方案是为每个class_id plus number_grade组合编写一条SQL语句。 这会产生五个针对class_id = 1的SQL语句:

UPDATE enrollments SET final_letter_grade='A'
WHERE class_id=1 AND final_numeric_grade BETWEEN 66 and 75;

UPDATE enrollments SET final_letter_grade='B'
WHERE class_id=1 AND final_numeric_grade BETWEEN 56 and 65;

UPDATE enrollments SET final_letter_grade='C'
WHERE class_id=1 AND final_numeric_grade BETWEEN 46 and 55;

UPDATE enrollments SET final_letter_grade='D'
WHERE class_id=1 AND final_numeric_grade BETWEEN 36 and 45;

UPDATE enrollments SET final_letter_grade='F'
WHERE class_id=1 AND final_numeric_grade <=35;

这是很多声明,甚至不包括其他类ID的声明! 同样,将有五个class_id = 2的语句。
编写单一的陈述来完成这项任务会更容易。 该陈述将需要逻辑,否则被称为条件或程序逻辑。
PL / SQL使用过程逻辑来扩展SQL。

DECLARE
    v_new_letter_grade varchar2(1);
    CURSOR c_enrollments IS
        SELECT stu_id, final_numeric_grade FROM enrollments WHERE class_id=1;
BEGIN
    FOR c1 in c_enrollments
    LOOP
         IF c1.final_numeric_grade BETWEEN 66 and 75 THEN v_new_letter_grade := 'A';
         ELSIF c1.final_numeric_grade BETWEEN 56 AND 65 THEN v_new_letter_grade := 'B';
         ELSIF c1.final_numeric_grade BETWEEN 46 AND 55 THEN v_new_letter_grade := 'C';
         ELSIF c1.final_numeric_grade BETWEEN 36 AND 45 THEN v_new_letter_grade := 'D';
         ELSE
             v_new_letter_grade := 'F';
         END IF;
         UPDATE enrollments
            SET final_letter_grade=v_new_letter_grade WHERE class_id=1 AND stu_id=c1.stu_id;
    END LOOP;
    COMMIT;
END;


五、程序构造

您使用PL / SQL来编写过程代码,并在PL / SQL代码中嵌入SQL数据访问语句。
PL / SQL代码使用变量,游标和条件逻辑。
PL / SQL提供程序结构,例如:
- 变量,常量和类型
- 控制结构,如条件语句和循环
- 可重复使用的程序单元,一次写入并执行多次


程序性结构突出显示



六、PL / SQL的特性

PL/ SQL:
•是一种高度结构化,易读,易读的语言。
•是Oracle开发的标准和便携式语言。
•是嵌入式语言,它适用于SQL。
•是一种高性能,高度集成的数据库语言。
•基于ADA语言,语法上有很多相似之处。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值