注册
DM存储过程
专栏/技术分享/ 文章详情 /

DM存储过程

Arno 2025/09/12 185 0 0
摘要

1.简介

存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果需要)来执行它。
特点:
a.预编译:创建时进行语法检查和编译,执行时无需再次编译,执行效率高。
b.减少网络流量:只需传递过程名和参数,而不是大量的原始 SQL 语句。
c.增强安全性:可以授权用户执行存储过程,而不直接操作底层表。
d.逻辑封装:将复杂的业务逻辑封装在数据库端,便于复用和维护。

2.DM 存储过程的结构

2.1基本结构
CREATE [OR REPLACE] PROCEDURE <过程名>
[
<参数名> <参数模式> <数据类型> [DEFAULT <默认值>],

]
AS | IS
[<声明部分:变量、常量、游标等>]
BEGIN
<执行部分:SQL语句、流程控制等>
[EXCEPTION
<异常处理部分>]
END [<过程名>];
/
其中:
参数模式:IN(输入,默认),OUT(输出),IN OUT(输入输出)。
执行:EXECUTE <过程名>(<参数值>);或CALL <过程名>(<参数值>);
修改:使用CREATE OR REPLACE PROCEDURE重新定义。
删除:DROP PROCEDURE proc_name;
查看:查询USER_SOURCE视图查看源代码:

2.2简单示例
创建一个存储过程,用于给指定员工涨薪。
CREATE OR REPLACE PROCEDURE raise_salary (
in_emp_id IN NUMBER,
in_raise_pct IN NUMBER DEFAULT 0.05
)
AS
v_current_salary NUMBER;
BEGIN
– 查询当前薪水
SELECT salary INTO v_current_salary FROM employees WHERE employee_id = in_emp_id;

– 更新薪水
UPDATE employees
SET salary = salary * (1 + in_raise_pct)
WHERE employee_id = in_emp_id;

– 提交事务(注意:也可以在调用端提交)
COMMIT;

DBMS_OUTPUT.PUT_LINE('Employee ’ || in_emp_id || ’ salary raised from ’ || v_current_salary || ’ to ’ || (v_current_salary * (1 + in_raise_pct)));
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘Employee ID ’ || in_emp_id || ’ not found.’);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred: ’ || SQLERRM);
ROLLBACK;
END raise_salary;
/

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服