12-条码打印&存储过程
提示
🐱👓任务需求:通过存储过程控制条码生成,包含流水号,一次性会要求生成多个。
1.存储过程
存储过程(Stored Procedure)是数据库中预先编写并存储的一组可重复使用的 SQL 语句集合,它具有类似编程语言的结构(如变量、条件判断、循环、异常处理等),可以通过一个名称被调用执行。
| 特点 | |
|---|---|
| 预编译 | 存储过程在创建时就被数据库引擎编译并优化,执行时无需重新解析,提高效率。 |
| 存储于数据库 | 它作为数据库对象保存在数据库服务器中,不依赖客户端程序。 |
| 可参数化 | 支持输入参数(IN)、输出参数(OUT)和输入/输出参数(INOUT),实现灵活交互。 |
| 可复用 | 多个应用程序或用户可通过调用同一个存储过程完成相同逻辑,避免代码重复。 |
| 封装逻辑 | 将复杂的业务逻辑(如多表联查、事务控制)封装在数据库层,简化应用层开发。 |
Qwen生成示例:
CREATE OR REPLACE PROCEDURE AdjustSalary(
p_emp_id IN NUMBER, -- 输入:员工ID
p_ratio IN NUMBER, -- 输入:调整比例(如 0.1 表示加10%)
p_result OUT VARCHAR2 -- 输出:操作结果信息
)
IS
v_current_salary NUMBER; -- 临时变量:当前工资
v_new_salary NUMBER; -- 新工资
emp_not_found EXCEPTION; -- 自定义异常
BEGIN
-- 查询当前工资
SELECT salary
INTO v_current_salary
FROM employees
WHERE emp_id = p_emp_id;
-- 计算新工资
v_new_salary := v_current_salary * (1 + p_ratio);
-- 更新工资
UPDATE employees
SET salary = v_new_salary
WHERE emp_id = p_emp_id;
-- 提交事务(可选,取决于是否由外部控制)
COMMIT;
-- 设置成功结果
p_result := '成功!员工 ' || p_emp_id || ' 的工资已从 ' ||
TO_CHAR(v_current_salary, '99999.99') || ' 调整为 ' ||
TO_CHAR(v_new_salary, '99999.99');
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- 员工不存在
ROLLBACK; -- 回滚事务
p_result := '错误:员工 ID ' || p_emp_id || ' 不存在!';
WHEN OTHERS THEN
-- 其他异常(如数值溢出等)
ROLLBACK;
p_result := '系统错误:' || SQLERRM;
END AdjustSalary;
/