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;
相关推荐
任子菲阳11 小时前
学JavaWeb第五天——MySQL
数据库·mysql
ZePingPingZe11 小时前
MySQL查看事务与锁
数据库·mysql
TDengine (老段)11 小时前
从“被动养护”到“主动预警”,TDengine IDMP 让智慧桥梁靠数据“说话”
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
白日做梦Q11 小时前
【MySQL】9.吃透关键SQL语法:从正则表达式、窗口函数、条件函数到结果集合并的实战拆解
数据库·sql·mysql·正则表达式
likuolei11 小时前
正则表达式 - 元字符
数据库·mysql·正则表达式
侧耳倾听11111 小时前
mysql中的binlog-介绍
数据库·mysql
少云清11 小时前
【接口测试】4_PyMySQL模块 _操作数据库
服务器·网络·数据库
IndulgeCui12 小时前
Kingbase-金仓企业级统一管控平台KEMCC一键部署主备集群及转换读写分离集群
数据库
数据库生产实战12 小时前
Oracle升级避坑指南:APEX卸载后sys.htmldb_system无效对象的处理方法
数据库·oracle
冰冰菜的扣jio12 小时前
SQL语句是如何在MySQL中执行的
数据库·sql