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;
相关推荐
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希5 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神5 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员5 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴6 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU6 小时前
三大范式和E-R图
数据库