Oracle包的用法
Oracle包的用法
1、语法格式
创建包头
CREATE [OR REPLACE] PACKAGE 包名 IS|AS 变量、常量及数据类型定义; 游标定义头部; 函数、过程的定义和参数列表以及返回类型; END [包名];
创建包体
CREATE [OR REPLACE] PACKAGE BODY 包名 IS|AS PROCEDURE 过程名(参数) IS|AS BEGIN 过程体; END [过程名]; FUNCTION 函数名(参数) RETURN 类型 IS|AS BEGIN 函数体; END [函数名]; END;
2、sql实例
创建一个包,包含有存储过程和函数
CREATE OR REPLACE PACKAGE PK_MYPACKAGE IS A NUMBER; -- 声明变量(声明的对象不一定要在包体中使用) PROCEDURE MY_SP(P_EMPNO IN NUMBER); -- 声明存储过程 FUNCTION MY_FUN(P_NUM1 IN NUMBER , P_NUM2 IN NUMBER) RETURN NUMBER; -- 声明函数 END;
CREATE OR REPLACE PACKAGE BODY PK_MYPACKAGE IS -- 通过员工号找员工姓名和工资存储过程 PROCEDURE MY_SP(P_EMPNO IN NUMBER) -- 和包中的声明要对应(并且一定要先声明) IS V_ENAME EMP.ENAME%TYPE; V_SAL EMP.SAL%TYPE; BEGIN SELECT ENAME, SAL INTO V_ENAME, V_SAL FROM EMP WHERE EMPNO=P_EMPNO; DBMS_OUTPUT.PUT_LINE('姓名:'|| V_ENAME ||'工资:'|| V_SAL); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('SELECT INTO语句中没有返回任何记录!'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('SELECT INTO语句中返回多于1条记录!'); END; -- 比较大小函数 FUNCTION MY_FUN(P_NUM1 IN NUMBER , P_NUM2 IN NUMBER) RETURN NUMBER IS BEGIN IF P_NUM1>P_NUM2 THEN RETURN P_NUM1; ELSE RETURN P_NUM2; END IF; END; END;
3、调用包中的存储过程和函数
调用函数:
select PK_MYPACKAGE.MY_FUN(3, 5) from dual;
调用存储
begin PK_MYPACKAGE.MY_SP(7369); end;
或者
call PK_MYPACKAGE.MY_SP(7369);
注意:如果存储里面有输出参数就只能用第一种方法
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版