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;
相关推荐
m0_736919108 分钟前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python
亓才孓8 分钟前
[JDBC]PreparedStatement替代Statement
java·数据库
m0_4665252935 分钟前
绿盟科技风云卫AI安全能力平台成果重磅发布
大数据·数据库·人工智能·安全
爱学习的阿磊1 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha1 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞2 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean2 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024632 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦2 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99992 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存