🏆 文章目标:关于之前发布的 PostgreSQL 存储过程相关的文章,网友反馈还是不错的,特此编写这篇文章来帮助那些需要了解Oracle 存储过程,用于快速整改或者上手,也是对大家的回馈。
🍀 一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
✅ 创作者:Jay…
🎉 个人主页:Jay的个人主页
🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧,再点点您的小手关注下,您的支持是我继续写作的最大动力,谢谢🙏 作为回馈,对我博客内容感兴趣的小伙伴可以私聊我,我免费分享 Oracle PL/SQL 的编码规范,大家一起共同进步。
Oracle PL/SQL 入门教程
Oracle PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的过程式扩展,用于构建复杂的数据库应用程序。本教程将带领您了解PL/SQL的基础知识和一些简单的案例。
PL/SQL是一种结构化的编程语言,允许开发者在Oracle数据库中编写过程、函数、触发器和包。这使得在数据库中执行复杂的逻辑操作成为可能。PL/SQL语言具有高性能、易于调试和维护的优点。
1. PL/SQL 基本结构
PL/SQL 的基本结构包括声明部分、执行部分和异常处理部分。一个典型的 PL/SQL 块如下所示:
基本结构:
DECLARE -- 声明部分 BEGIN -- 执行部分 EXCEPTION -- 异常处理部分 END;
示例:
DECLARE -- 声明部分 v_name VARCHAR2(100); BEGIN -- 执行部分 SELECT first_name INTO v_name FROM employees WHERE employee_id = 100; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name); EXCEPTION -- 异常处理部分 WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No data found for employee ID 100.'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('An error occurred.'); END; /
1.1 声明部分
在声明部分,可以声明变量、常量、游标、类型等。声明的语法如下:
variable_name data_type [NOT NULL] [:= default_value]; constant_name CONSTANT data_type := value;
1.2 执行部分
执行部分是 PL/SQL 块的主体,包括 SQL 语句、控制结构、循环等。
1.3 异常处理部分
异常处理部分用于捕获并处理运行时出现的错误。PL/SQL 支持自定义异常,也支持预定义异常。
2. 变量和常量
在PL/SQL中,可以使用DECLARE
部分声明变量和常量。变量用于存储中间值,常量用于存储不可更改的值。
2.1 变量
声明变量的语法:
variable_name datatype [NOT NULL] [:= initial_value];
示例:
DECLARE v_age NUMBER := 30; v_salary NUMBER; BEGIN v_salary := v_age * 1000; DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary); END; /
2.2 常量
声明常量的语法:
constant_name CONSTANT datatype := value;
示例:
DECLARE c_tax_rate CONSTANT NUMBER := 0.15; v_income NUMBER := 10000; v_tax NUMBER; BEGIN v_tax := v_income * c_tax_rate; DBMS_OUTPUT.PUT_LINE('Tax: ' || v_tax); END; /
3. 条件和循环控制
PL/SQL支持多种条件和循环控制结构,例如IF语句、CASE语句、FOR循环和WHILE循环。
3.1 IF语句
IF语句语法:
IF condition THEN -- statements ELSIF condition THEN -- statements ELSE -- statements END IF;
示例:
DECLARE v_age NUMBER := 25; BEGIN IF v_age < 20 THEN DBMS_OUTPUT.PUT_LINE('Teenager'); ELSIF v_age >= 20 AND v_age < 30 THEN DBMS_OUTPUT.PUT_LINE('Young adult'); ELSE DBMS_OUTPUT.PUT_LINE('Adult'); END IF; END; /
3.2 CASE语句
CASE语句语法:
CASE [expression] WHEN value1 THEN -- statements WHEN value2 THEN -- statements [ELSE -- statements] END CASE;
示例:
DECLARE v_score NUMBER := 85; v_grade CHAR(1); BEGIN CASE WHEN v_score >= 90 THEN v_grade := 'A'; WHEN v_score >= 80 THEN v_grade := 'B'; WHEN v_score >= 70 THEN v_grade := 'C'; ELSE v_grade := 'F'; END CASE; DBMS_OUTPUT.PUT_LINE('Grade: ' || v_grade); END; /
3.3 FOR循环
FOR循环语法:
FOR counter IN [REVERSE] lower_bound..upper_bound LOOP -- statements END LOOP
示例:
DECLARE BEGIN FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('Iteration: ' || i); END LOOP; END; /
3.4 WHILE循环
WHILE循环语法:
WHILE condition LOOP -- statements END LOOP;
示例:
DECLARE v_counter NUMBER := 1; BEGIN WHILE v_counter <= 5 LOOP DBMS_OUTPUT.PUT_LINE('Iteration: ' || v_counter); v_counter := v_counter + 1; END LOOP; END; /
3.5 示例
计算阶乘
以下示例演示了如何使用PL/SQL计算一个数字的阶乘:
DECLARE v_number NUMBER := 5; v_factorial NUMBER := 1; BEGIN FOR i IN 1..v_number LOOP v_factorial := v_factorial * i; END LOOP; DBMS_OUTPUT.PUT_LINE('Factorial of ' || v_number || ' is ' || v_factorial); END; /
检查素数
以下示例演示了如何使用PL/SQL检查一个数字是否为素数:
DECLARE v_number NUMBER := 29; v_is_prime BOOLEAN := TRUE; BEGIN FOR i IN 2..FLOOR(SQRT(v_number)) LOOP IF MOD(v_number, i) = 0 THEN v_is_prime := FALSE; EXIT; END IF; END LOOP; IF v_is_prime THEN DBMS_OUTPUT.PUT_LINE(v_number || ' is a prime number.'); ELSE DBMS_OUTPUT.PUT_LINE(v_number || ' is not a prime number.'); END IF; END; /
计算平均工资
假设我们有一个 employees
表,现在要计算所有员工的平均工资,并将结果存储在一个变量中。
sqlCopy code DECLARE v_total_salary NUMBER := 0; v_avg_salary NUMBER; v_employee_count NUMBER := 0; BEGIN -- 计算员工总工资 SELECT SUM(salary) INTO v_total_salary FROM employees; -- 计算员工总数 SELECT COUNT(*) INTO v_employee_count FROM employees; -- 计算平均工资 IF v_employee_count > 0 THEN v_avg_salary := v_total_salary / v_employee_count; DBMS_OUTPUT.PUT_LINE('平均工资为:' || TO_CHAR(v_avg_salary)); ELSE DBMS_OUTPUT.PUT_LINE('无员工数据'); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('发生错误:' || SQLERRM); END; /
这个例子展示了 PL/SQL 基本结构和控制结构的用法。首先,我们声明了三个变量:v_total_salary
、v_avg_salary
和 v_employee_count
。然后,在执行部分,我们分别查询员工总工资和员工总数,并将结果存储在相应的变量中。接下来,我们使用 IF-THEN-ELSE 控制结构计算平均工资,并通过 DBMS_OUTPUT.PUT_LINE
输出结果。最后,我们使用异常处理部分捕获可能出现的错误。
4. 存储过程和函数
PL/SQL 允许创建存储过程和函数,它们是可重用的 PL/SQL 代码块,可以从其他PL/SQL代码块、SQL语句或应用程序中调用。存储过程和函数的主要区别在于,函数必须返回一个值,而存储过程不需要。
关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)+https://developer.aliyun.com/article/1492306