博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ORACLE之PACKAGE-包、存储过程、函数
阅读量:4957 次
发布时间:2019-06-12

本文共 4061 字,大约阅读时间需要 13 分钟。

1,。

创建包规范:

create or replace package pack_test1 is  -- 定义过程1  procedure p_test1(p_1 in varchar2);  -- 定义函数1  function f_test1(p_1 in varchar2) return varchar2;end pack_test1;

创建包体:

create or replace package body pack_test1 is  -- 包全局变量1  v_param1 varchar(20) := 'default';  -- 实现过程1  procedure p_test1(p_1 in varchar2) is  begin    dbms_output.put_line('p_1的值为:'|| p_1);    dbms_output.put_line('全局变量的值为:'||v_param1);    -- 改变全局变量    v_param1 := p_1;    dbms_output.put_line('改变后的全局变量值为:'||v_param1);  end;  -- 实现函数1  function f_test1(p_1 in varchar2) return varchar2 is    v_rt varchar2(50);  begin    dbms_output.put_line('获取的全局变量值为:'||v_param1);    v_rt := v_param1||'-'||p_1;    dbms_output.put_line('返回值为:'||v_rt);    return v_rt;  end f_test1;end pack_test1;---------------------

调用包:

在一般的sql窗口可以使用以下方法:

-- 调用过程call pack_test1.p_test1('参数1');-- 调用函数select pack_test1.f_test1('参数2') from dual;

在命令窗口可以使用:

exec pack_test1.p_test1('参数1');--执行此包 存在版本问题 看不到输出

 

2,包间调用

刚学pl/sql编程,写了两个package。pkg_temp_fn和pkg_temp_fn2。内容涉及pl/sql基本语法,游标,存储过程(in,out),函数(有返回值)。

 

  • pkg_temp_fn内有一个function f_getdept(v_deptid number) return VARCHAR2和一个procedure p_getinfo(v_mapid NUMBER)

创建包规范

1 create or replace package pkg_temp_fn is2   function f_getdept(v_deptid number) return VARCHAR2;3   --reference pkg_temp_fn24   procedure p_getinfo(v_mapid NUMBER/*,v_pname VARCHAR2(20),v_deptno VARCHAR2(15)*/);5  -- procedure p_main_process;6 end pkg_temp_fn;7 --3/24/20168 --var map_id number;9 --exec pkg_temp_fn.p_getinfo(&map_id);调用方法

创建包体

1 create or replace package body pkg_temp_fn 2 is 3   function f_getdept(v_deptid number) return VARCHAR2 4   is 5     deptno varchar2(15); 6     begin 7         select y.dept_no into deptno from t_fn_dept y where y.dept_id=v_deptid; 8       return deptno; 9     end f_getdept;10 11   procedure p_getinfo(v_mapid NUMBER)12     is13       cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;14       pname VARCHAR2(20);15       pdept number;16       v_deptno VARCHAR2(15);17       begin18         open xing;19         loop20           fetch xing into pname,pdept;21           exit when xing%notfound;22           v_deptno:=f_getdept(pdept);--call function23           dbms_output.put_line(pname||'''s dept is :'||v_deptno);24         end loop;25         close xing;26       end p_getinfo;27 end pkg_temp_fn;
  • kg_temp_fn2内有一个function f_getdept(v_deptid number) return VARCHAR2、一个procedure p_getinfo(v_mapid NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2),一个procedure p_main_process(v_mapid NUMBER)。

创建包规范

1 create or replace package pkg_temp_fn2 is2   function f_getdept(v_deptid number) return VARCHAR2;3   procedure p_getinfo(v_mapid NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2);4   procedure p_main_process(v_mapid NUMBER);5 end pkg_temp_fn2;6 --3/24/20167 --var map_id number;8 --exec pkg_temp_fn2.p_main_process(&map_id);调用方法

创建包体

1 create or replace package body pkg_temp_fn2 2 is 3   function f_getdept(v_deptid number) return VARCHAR2 4   is 5     deptno varchar2(15); 6     begin 7         select y.dept_no into deptno from t_fn_dept y where y.dept_id=v_deptid; 8       return deptno; 9     end f_getdept;10 11   procedure p_getinfo(v_mapid in NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2)12     is13       cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;14       pdept number;15       begin16         open xing;17         loop18           fetch xing into v_pname,pdept;19           exit when xing%notfound;20           v_deptno:=f_getdept(pdept);--21           --dbms_output.put_line(pname||'''s dept is :'||v_deptno);22         end loop;23         close xing;24       end p_getinfo;25    procedure p_main_process(v_mapid NUMBER)26      is27      v_pname  VARCHAR2(20);28      v_deptno  varchar2(15);29      begin30        p_getinfo(v_mapid,v_pname,v_deptno);31        dbms_output.put_line(v_pname||'''s dept is :'||v_deptno);32      end p_main_process;33 end pkg_temp_fn2;

ps:

定义变量或者参数的的时候,类型不要有括号,否则报错。

 

转载于:https://www.cnblogs.com/hoaprox/p/5316444.html

你可能感兴趣的文章
qt学习记录-----3.信号与槽的问题
查看>>
『ORACLE』 内置约束(11g)
查看>>
Vue--学习过程中遇到的坑
查看>>
组件:slot插槽
查看>>
.net压缩图片质量(附demo)
查看>>
equals和==的区别
查看>>
Android6.0指纹识别开发
查看>>
java反射机制剖析(二)— Class Loader
查看>>
走进C++程序世界------异常处理
查看>>
通过用户模型,对数据库进行增删改查操作。
查看>>
去除数组中重复的元素
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1988 Cube Stacking
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
Android------三种监听OnTouchListener、OnLongClickListener同时实现即其中返回值true或者false的含义...
查看>>
MATLAB实现多元线性回归预测
查看>>
Mac xcode 配置OpenGL
查看>>
利用sed把一行的文本文件改成每句一行
查看>>
使用Asyncio的Coroutine来实现一个有限状态机
查看>>