ORACLE之PACKAGE-包、存储过程、函数
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)
创建包规范
create or replace package pkg_temp_fn is
function f_getdept(v_deptid number) return VARCHAR2;
--reference pkg_temp_fn2
procedure p_getinfo(v_mapid NUMBER/*,v_pname VARCHAR2(20),v_deptno VARCHAR2(15)*/);
-- procedure p_main_process;
end pkg_temp_fn;
--3/24/2016
--var map_id number;
--exec pkg_temp_fn.p_getinfo(&map_id);调用方法
创建包体
create or replace package body pkg_temp_fn
is
function f_getdept(v_deptid number) return VARCHAR2
is
deptno varchar2(15);
begin
select y.dept_no into deptno from t_fn_dept y where y.dept_id=v_deptid;
return deptno;
end f_getdept; procedure p_getinfo(v_mapid NUMBER)
is
cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;
pname VARCHAR2(20);
pdept number;
v_deptno VARCHAR2(15);
begin
open xing;
loop
fetch xing into pname,pdept;
exit when xing%notfound;
v_deptno:=f_getdept(pdept);--call function
dbms_output.put_line(pname||'''s dept is :'||v_deptno);
end loop;
close xing;
end p_getinfo;
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)。
创建包规范
create or replace package pkg_temp_fn2 is
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);
end pkg_temp_fn2;
--3/24/2016
--var map_id number;
--exec pkg_temp_fn2.p_main_process(&map_id);调用方法
创建包体
create or replace package body pkg_temp_fn2
is
function f_getdept(v_deptid number) return VARCHAR2
is
deptno varchar2(15);
begin
select y.dept_no into deptno from t_fn_dept y where y.dept_id=v_deptid;
return deptno;
end f_getdept; procedure p_getinfo(v_mapid in NUMBER,v_pname out VARCHAR2,v_deptno out VARCHAR2)
is
cursor xing is select x.person_name,x.dept from t_fn_person x where x.map_id=v_mapid;
pdept number;
begin
open xing;
loop
fetch xing into v_pname,pdept;
exit when xing%notfound;
v_deptno:=f_getdept(pdept);--
--dbms_output.put_line(pname||'''s dept is :'||v_deptno);
end loop;
close xing;
end p_getinfo;
procedure p_main_process(v_mapid NUMBER)
is
v_pname VARCHAR2(20);
v_deptno varchar2(15);
begin
p_getinfo(v_mapid,v_pname,v_deptno);
dbms_output.put_line(v_pname||'''s dept is :'||v_deptno);
end p_main_process;
end pkg_temp_fn2;
ps:
定义变量或者参数的的时候,类型不要有括号,否则报错。
ORACLE之PACKAGE-包、存储过程、函数的更多相关文章
- MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...
- .Net程序员学用Oracle系列:视图、函数、存储过程、包
1.视图 在实际操作过程中,本人发现 Oracle 视图定义有一个缺陷,就是不大方便注释,每次写好的注释执行之后再打开视图定义所有注释就全都没了.后来我发现把注释写到末尾就不会被清除,但这样总感觉乖乖 ...
- Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?
Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程? 麦苗答:方法有多种,可以使用DBMS_MET ...
- oracle 包,函数,过程,块的创建和执行及在java中执行(转)
SQL> create or replace procedure sp_guocheng1 is--如果有这个名字就替换 2 begin--执行部分 3 insert into guoc ...
- oracle 的自定义的存储函数遇到的 package or function is in an invalid state
转: oracle 的自定义的存储函数遇到的 package or function is in an invalid state 2017-10-28 11:08:17 major_tom 阅读数 ...
- Oracle中定义package以及存储过程的使用
使用scott账户下的dept表: select * from dept order by deptno; 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 S ...
- MySQL与Oracle 差异比较之五存储过程&Function
存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC( id_fac ...
- Oracle数据库程序包全局变量的应用
1 前言 在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...
- 公司需求知识自学-Oracle的Package的作用及用法
Oracle的Package的作用 简化应用设计.提高应用性能.实现信息隐藏.子程序重载. 1.Oracle的Package除 了把存储过程放到一堆儿以外还有没有其他的作用(好处)? 你不觉得把存储过 ...
- Oracle DBA管理包脚本系列(二)
该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...
随机推荐
- (转-经典-数据段)C++回顾之static用法总结、对象的存储,作用域与生存期
转自:https://blog.csdn.net/ab198604/article/details/19158697相关知识补充:https://www.cnblogs.com/rednodel/p/ ...
- Ubuntu18.04启用中文输入法
Ubuntu18.04发布了,但是搜狗输入法目前尚未支持. 而18.04自带的中文输入法选择sunpinyin为预设中文输入引擎,但是并没有将sunpinyin放入iso镜像中.详情参考https:/ ...
- Android Launcher分析和修改4——初始化加载数据
上面一篇文章说了Launcher是如何被启动的,Launcher启动的过程主要是加载界面数据然后显示出来, 界面数据都是系统APP有关的数据,都是从Launcher的数据库读取,下面我们详细分析Lau ...
- Angularjs中config中置入以下拦截器
$httpProvider.interceptors.push(['$rootScope', '$q', '$localStorage', function ($rootScope, $q, $loc ...
- 命名实体识别,使用pyltp提取文本中的地址
首先安装pyltp pytlp项目首页 单例类(第一次调用时加载模型) class Singleton(object): def __new__(cls, *args, **kwargs): if n ...
- InstallShield:卸载时文字叠加,文字乱码
问题: InstallShield2010打包的程序.如果程序正在运行,卸载程序,提示关闭程序,然后消息界面出现文字叠加. 定位问题: 新建Installshield项目,依次修改SetupType, ...
- 挖坑:handoop2.6 开启kerberos(全流程学习记录)
目录: 1.涉及插件简介 2.安装步骤 3.日志错误查看 1.kerberos是什么东西 度娘指导: Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为 客户机 / 服务器 应用程序提供 ...
- 网络协议TCP/IP、IPX/SPX、NETBEUI简介
网络中不同的工作站,服务器之间能传输数据,源于协议的存在.随着网络的发展,不同的开发商开发了不同的通信方式.为了使通信成功可靠,网络中的所有主机都必须使用同一语言,不能带有方言.因而必须开发严格的标准 ...
- Eclipse使用心得与技巧
一. 常用快捷键(熟练使用快捷键可以充分提高编程效率,吐血整理...) 1,Alt + ↑上方向键:向上移动选中的代码,你可以把一行或者一段代码直接上移几行 2,Alt + ↓下方向键:向下移动选中的 ...
- python concurrent.futures.Threadpoolexcutor的有界队列和无界队列
1.默认是无界队列,如果生产任务的速度大大超过消费的速度,则会把生产任务无限添加到无界队列中,这样一来控制不了生产速度,二来是会造成系统内存会被队列中的元素堆积增多而耗尽. 2.改写为有界队列 cla ...