第90期培训-第五部分—Oracle11g-Oracle SQL对象管理—第17讲—存储过程
一、存储过程概念
1、存储过程
存储过程(Stored Procedure)是一段预定义的复杂逻辑代码块,可以接收输入参数并且能够进行一系列的操作,最终可以返回一个值或者更新数据库中的数据。
在 Oracle SQL 中,存储过程是一种封装了业务逻辑的数据库对象,可以被多个应用程序调用,从而提高了程序的复用性和可维护性。
2、存储过程语法
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [type], parameter2 [type], ...)] IS [local_variable1 [type] := value1;] [local_variable2 [type] := value2;] BEGIN -- 存储过程体逻辑 EXCEPTION -- 异常处理 END;
--procedure_name 是存储过程的名称; --parameter1, parameter2, ... 是存储过程的输入参数列表; --local_variable1, local_variable2, ... 是存储过程内部使用的局部变量。
3、案例
CREATE PROCEDURE update_employee_salary(employee_id IN NUMBER, salary IN NUMBER) AS BEGIN UPDATE employees SET salary = salary WHERE employee_id = employee_id; COMMIT; -- 提交事务 END;
4、注意事项:
--存储过程需要避免与数据库中已有的表、列、函数重复命名。 --存储过程中的语句应该尽量简单、高效,避免过度复杂的操作。 --如果存储过程涉及数据库操作,应该注意事务处理和异常处理,以保证数据的正确性和安全性。
5、优点:
--存储过程可以减少网络流量和数据库负载,从而提高了系统的性能。 --存储过程可以简化业务逻辑的编写,并且提供了更灵活的业务流程控制方式。 --存储过程可以保护数据的安全性,只有授权的用户才能访问存储过程。
6、缺点:
--存储过程可能会引发过度复杂和难以维护的业务逻辑,需要小心使用。 --存储过程的调试和开发需要使用一定的工具和技巧,需要一定的学习成本。
二、Oracle中存错过程的应用案例
1、创建表
假设有一个 orders 表,其中包含 order_id、customer_id、order_date、order_total 等列。
我们希望创建一个存储过程来计算每个客户的总订单金额,并将结果存储到一个新的表 customer_summary 中。
首先,我们需要创建 customer_summary 表来存储计算结果:
sql CREATE TABLE customer_summary ( customer_id INT, total_order_amount DECIMAL(10, 2) );
2、插入数据
3、创建存储过程
然后,我们可以创建一个存储过程来计算每个客户的总订单金额:
sql CREATE OR REPLACE PROCEDURE calculate_customer_summary AS BEGIN -- 清空 customer_summary 表 TRUNCATE TABLE customer_summary; -- 插入每个客户的总订单金额 INSERT INTO customer_summary (customer_id, total_order_amount) SELECT customer_id, SUM(order_total) FROM orders GROUP BY customer_id; -- 提交事务 COMMIT; END;
在上述案例中,calculate_customer_summary 存储过程通过使用 SUM 函数和 GROUP BY 子句来计算每个客户的总订单金额,并将结果插入到 customer_summary 表中。最后使用 COMMIT 语句提交事务。
通过调用存储过程 calculate_customer_summary,我们可以在需要计算和更新客户订单总金额时轻松地使用它。
4、执行存储过程
EXECUTE calculate_customer_summary;
5、查看结果