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)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...
随机推荐
- linux每日命令(29):chown命令
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- Selenium Web 自动化 - Selenium(Java)环境搭建
Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...
- Oracle的NVL函数用法
从两个表达式返回一个非 null 值. 语法 NVL(eExpression1, eExpression2) 参数eExpression1, eExpression2 如果 eExpression1 ...
- Odoo 去掉 恼人的 "上午"和"下午"
- C语言学习之路
c语言学习 初识c语言 c语言数据类型.运算符和表达式(整数浮点数) 字符型数据/字符串 算术运算符和算术表达式(优先级,结合性等) 顺序程序设计(运算符之类内容,字符输入输出等) C/C++ 查看数 ...
- snopy 数据库简介
snoRNA ,small nucleolar RNA, 核仁小分子RNA, 是一类在细胞核内的small non-coding RNA, 长度在60-300nt, 其主要功能是调控其他小RNA分子( ...
- nmon 加权平均法
Snapshot %tm_act 1 0 2 0 3 0 4 0 5 0 6 6.1 7 6.3 8 6.5 9 9.1 10 5.9 11 0 12 0 13 0 14 0 15 0 (10*0*0 ...
- java获取视频缩略图
近期由于在做一个关于视频播放的项目,需要使用程序自动获取视频文件的缩略图,特写此文供其他人参考,有不清楚之楚可以给我留言. 1.使用工具:ffmpeg, 官网下载地址:http://ffmpeg.or ...
- 给 Advice 传递参数
参数绑定是在下面这个方法中做的:org.springframework.aop.aspectj.AbstractAspectJAdvice#invokeAdviceMethod(JoinPoint j ...
- ASP.NET MVC 4 (八) URL链接和Ajax帮助函数
使用帮助函数创建链接 MVC提供一些帮助函数创建链接,这些函数根据路径映射表自动调整生成的URL: 说明 示例 输出结果 应用程序相对URL Url.Content("~/Content/S ...