首页 > 数据库 >ORACLE之PACKAGE-包、存储过程、函数

ORACLE之PACKAGE-包、存储过程、函数

时间:2023-04-03 11:13:27浏览次数:54  
标签:test1 存储 end temp PACKAGE -- VARCHAR2 ORACLE deptno

原文地址:https://www.cnblogs.com/hoaprox/p/5316444.html

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 is
2   function f_getdept(v_deptid number) return VARCHAR2;
3   --reference pkg_temp_fn2
4   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/2016
8 --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     is
13       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       begin
18         open xing;
19         loop
20           fetch xing into pname,pdept;
21           exit when xing%notfound;
22           v_deptno:=f_getdept(pdept);--call function
23           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 is
2   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/2016
7 --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     is
13       cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;
14       pdept number;
15       begin
16         open xing;
17         loop
18           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      is
27      v_pname  VARCHAR2(20);
28      v_deptno  varchar2(15);
29      begin
30        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:

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

标签:test1,存储,end,temp,PACKAGE,--,VARCHAR2,ORACLE,deptno
From: https://www.cnblogs.com/eyesfree/p/17282480.html

相关文章

  • VS2017 未能正确加载“ReferenceManagerPackage”包
    MicrosoftVisualStudio未能正确加载“ReferenceManagerPackage”包。1.以管理员身份打开DeveloperCommandPromptforVS20172.定位到你的vs2017的安装目录我安装的是企业版就是E:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Enterprise\Common7\IDE\PublicAssemblies......
  • 【测试】主流数据库存储过程编写样例(Oracle、MySQL、SQL Server)
    这个...做测试其实有时候还是需要先弄点数据才好针对某些功能进行测试的(相信做过开发的都应该深有体会)。一般像我这种老油条都推荐使用存储过程来做的初始化数据,一来脚本不会骗人,二来可以通过另一种方式验证逻辑关系。下面将整理了三个主流数据库(Oracle、MySQL和SQLServer)的“单表......
  • oracle存储过程调试无法进入,oracle存储过程无法调试
    问题:使用pl/sqldeveloper调试oracle 存储过程。在存储过程上点右键,选调试(test),然后按f9(debug)。这是正常的话,那些run、stepinto等按钮就可以点了,或者点run到断点,或者点stepinto做单步跟踪。但是在一个oraclerac双机环境中调试一个存储过程,点f9后有时能继续run或者stepint......
  • 在docker中配置Oracle11g
    在docker中配置Oracle11gdocker镜像拉取及相关配置1.在docker打开的情况下,使用下方命令拉去镜像,大概需要下载3个G的image文件dockerpullregistry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g2.启动Oracle镜像并为镜像新建容器,注意此处的oracle11g即为容器名,可以自主设置......
  • site-packages/flask/json/init.py from future import annotations future feature a
    如果在使用Flask库时,出现了“futurefeatureannotationsisnotdefined”的错误,可能是因为Python解释器版本太低。在Python3.7及以下版本中,from__future__importannotations是不支持的,因此需要升级到Python3.8或更高版本。如果升级Python解释器版本不可行,可以......
  • Springboot 系列 (27) - Springboot+HBase 大数据存储(五)| HBase REST 服务
    REST(RepresentationalStateTransfer)即表述性状态传递,是RoyFielding博士2000年在他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。在三种主流的Web服务实现方案中,与复杂的SOAP和XML-RPC相......
  • 使用 SK 示例 探索 GitHub 存储库 中的机器人
    微软3月22日一篇文章“Semantic-kernel嵌入和记忆:使用聊天UI探索GitHubRepos”[1],文章中进行了展示了嵌入,该文章解释了他们如何帮助开发人员提出有关GitHub存储库的问题或使用自然语言查询探索GitHub存储库。与嵌入一起,这是在SK存储器[2](嵌入集合)的帮助下完成的,这有助于为提......
  • KVM的存储选项
     KVM的存储选项有多种,包括虚拟磁盘文件、基于文件系统的存储和基于设备的存储。为实现KVM(Kernel-basedVirtualMachine)存储管理,可以使用LVM(LogicalVolumeManager)和创建存储池。当系统创建KVM虚拟机的时候,默认使用虚拟磁盘文件作为后端存储。安装后,虚拟机认为在使用真......
  • Oracle 执行Update 或 select for update 是卡着
    原因和解决方法这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。通过执行下列语句查询当前卡着的会话SELECTs.sid,s.serial#FROMv$l......
  • 鹅厂存储往事
    ▉ QZone告急,临危受命2005年,是中国第二次互联网浪潮的发始之年。刚刚从破碎泡沫中走出的互联网产业,逐渐迎来了“web2.0”时代。这个时代的特征,就是去中心化、开放和共享。越来越多的互联网用户,开始以兴趣为聚合点,组成社群,分享生活,发表观点。他们积极参与话题讨论,渴望获得关注和认......