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;
相关推荐
茉莉玫瑰花茶16 分钟前
综合案例 - AI 智能租房助手 [ 5 ]
服务器·数据库·人工智能·python·ai
ywl47081208717 分钟前
jwt生产token,简单版helloworld
java·数据库·spring
器灵科技30 分钟前
AI视频工具实测:Seedance/可灵/HappyHorse谁最能打?
java·运维·数据库·人工智能·github
huangdong_1 小时前
京东商品图片视频批量下载与m3u8视频合并技术完整实现方案
大数据·前端·数据库
倒流时光三十年1 小时前
PostgreSQL CASE 条件表达式详解
数据库·postgresql
字节跳动数据平台1 小时前
营销视频进入工业化时代,火山引擎多模态数据湖如何助力多米实现内容生产提效 100+ 倍
数据库
健康平安的活着2 小时前
mysql中数据库脚本太大,通过脚本命令修改db名称
数据库·mysql
倒流时光三十年2 小时前
PostgreSQL COALESCE 条件表达式函数详解
数据库·postgresql
让我上个超影吧2 小时前
Claude code:Hooks
java·数据库·ai编程
RH2312112 小时前
2026.6.8Linux
java·数据库·中间件