一、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语言,语法上有很多相似之处。