oracle:存储过程基础语法

文章目录


oracle:存储过程

一、存储过程的创建和调用(无参)

sql 复制代码
--创建存储过程
CREATE OR REPLACE PROCEDURE test_procedure
IS
BEGIN
  -- 在这里编写你的PL/SQL代码
  DBMS_OUTPUT.PUT_LINE('Hello, World!');
END test_procedure;
sql 复制代码
--调用存储过程
BEGIN
  test_procedure;
END;

二、存储过程的创建和调用(有参)

sql 复制代码
--包含参数的存储过程
CREATE OR REPLACE PROCEDURE test_param_procedure(
  p_emp_id IN NUMBER,
  p_emp_name IN VARCHAR2,
  p_emp_salary OUT NUMBER
) IS
BEGIN
	-- 为OUT参数赋值
    p_emp_salary := 5000;
	DBMS_OUTPUT.PUT_LINE(p_emp_id||p_emp_name||p_emp_salary);
END test_param_procedure;
sql 复制代码
--调用带参数的存储过程
DECLARE
  v_salary NUMBER;
BEGIN
  test_param_procedure(101, 'John Doe', v_salary);
  DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_salary);
END;

三、存储过程异常捕获

将SQL内部故意修改错,方便测试异常:p_emp_salary := 5000/0;

sql 复制代码
--包含参数的存储过程
CREATE OR REPLACE PROCEDURE test_param_procedure(
  p_emp_id IN NUMBER,
  p_emp_name IN VARCHAR2,
  p_emp_salary OUT NUMBER
) IS
BEGIN
	-- 为OUT参数赋值
    p_emp_salary := 5000/0;
	DBMS_OUTPUT.PUT_LINE(p_emp_id||p_emp_name||p_emp_salary);
END test_param_procedure;

1.正常捕获时调用

sql 复制代码
--使用PL/SQL块调用存储过程并处理异常
DECLARE
  -- 1. 正确声明一个本地变量来接收 OUT 参数
  v_salary NUMBER;
BEGIN
  -- 2. 调用存储过程,将本地变量传递给 OUT 参数
  test_param_procedure(102, 'Jane Smith', v_salary);
  
  -- 3. 后续可以使用 v_salary 这个变量
  DBMS_OUTPUT.PUT_LINE('成功调用!输出的薪水为:' || v_salary);
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error_code: ' || SQLCODE);--返回当前错误的数字代码
    DBMS_OUTPUT.PUT_LINE('Error_msg: ' || SQLERRM);--返回与当前错误关联的完整错误消息文本
    DBMS_OUTPUT.PUT_LINE('Error_all_msg: ' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);--返回详细的错误堆栈跟踪,精确定位到错误发生的行号。
END;

2.无捕获时调用

sql 复制代码
DECLARE
  v_salary NUMBER;
BEGIN
  test_param_procedure(101, 'John Doe', v_salary);
  DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || v_salary);
END;

四、查看存储过程源代码

sql 复制代码
--查看存储过程源代码:存储过程名称大小写敏感,oracle默认大写
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', 'TEST_PARAM_PROCEDURE') FROM DUAL;
相关推荐
一灰灰blog几秒前
Spring AI中的多轮对话艺术:让大模型主动提问获取明确需求
数据库·人工智能·spring
Nandeska32 分钟前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人1 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
加油,小猿猿1 小时前
Java开发日志-双数据库事务问题
java·开发语言·数据库
山岚的运维笔记2 小时前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
Gain_chance2 小时前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
未来之窗软件服务2 小时前
计算机等级考试—高频英语词汇—东方仙盟练气期
数据库·计算机软考·东方仙盟
lekami_兰2 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
蚕豆哥3 小时前
【2026马年重启】我的 Primavera P6/Unifier 技术笔记,继续更新!
ai·oracle·项目管理·unifier·p6·进度管理·甲骨文
JQLvopkk3 小时前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#