oracle 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包
文章目录
- 1. 程序包
- 1.1 程序包定义
- 1.2 程序包创建
- 1.3 程序包中的游标
- 1.4 有关程序包的信息
- 2. 内置程序包
- 3. DBMS_JOB包
- 4. UTL_FILE包
1. 程序包
1.1 程序包定义
程序包是对相关过程、函数、游标、异常等对象的封装;程序包由规范和主体2部分组成:
规范:
声明程序包中公共对象,包括类型、变量、异常、游标规范和子程序规范;
主体:
声明程序包私有对象和实现在包规范中声明的子程序和游标;
项目中都是建立程序包,之后再建立过程、函数
1.2 程序包创建
规范:
CREATE [OR REPLACE] PACKAGE package_name[AUTHID {CURRENT_USER | DEFINER}]{IS | AS}[公有数据类型定义[公有数据类型定义]…][公有游标声明[公有游标声明]…][公有变量、常量声明[公有变量、常量声明]…][公有函数声明[公有函数声明]…][公有过程声明[公有过程声明]…]
END [package_name];
主体
CREATE [OR REPLACE] PACKAGE BODY package_name{IS | AS}[私有数据类型定义[私有数据类型定义]…][私有变量、常量声明[私有变量、常量声明]…][私有异常错误声明[私有异常错误声明]…][私有函数声明和定义[私有函数声明和定义]…][私有函过程声明和定义[私有函过程声明和定义]…][公有游标定义[公有游标定义]…][公有函数定义[公有函数定义]…][公有过程定义[公有过程定义]…]
BEGIN执行部分(初始化部分)
END package_name;
如:
(1) 插入更新scott中emp表
create or replace package pack1is a int:=9;procedure insert_emp(a1 in scott.emp%rowtype);procedure update_emp(a2 in scott.emp%rowtype);end pack1;/
create or replace package body pack1is b int:=5;procedure insert_emp(a1 in scott.emp%rowtype)is begin insert into scott.emp values (a1.EMPNO,'fd','fd',7902,null,8000,null,20); commit;dbms_output.put_line('pack1中a变量'||pack1.a);end insert_emp;procedure update_emp(a2 in scott.emp%rowtype)is begin update scott.emp set ENAME=a2.ENAME where EMPNO=a2.EMPNO;commit;end update_emp;end pack1;/
公有类型变量在包外可访问,私有类型变量在包外不能访问
declarea scott.emp%rowtype;begina.EMPNO:=6666;pack1.insert_emp(a);end;/
declarea scott.emp%rowtype;begina.EMPNO:=6666;a.ENAME:='jack';pack1.update_emp(a);end;/
1.3 程序包中的游标
游标的定义分为游标规范和游标主体2部分;在包规范中声明游标规范必须使用RETURN子句指定游标的返回类型;
RETURN子句指定的数据类型可以是:
用%rowtype属性引用表定义的记录类型;
程序员自定义的记录类型,如 type emprectyp is record(emp_id integer,salary real)来定义的;
不可是number,varchar2,%type类型
如
(1)在程序包内使用显示游标
create or replace package pack2iscursor mycursor return scott.emp%rowtype;procedure mycursor_use;end pack2;/
create or replace package body pack2iscursor mycursor return scott.emp%rowtype is select * from scott.emp;procedure mycursor_use is emp_rec scott.emp%rowtype;beginopen mycursor;fetch mycursor into emp_rec ;while mycursor%found loopdbms_output.put_line('姓名为'||emp_rec.ENAME );fetch mycursor into emp_rec ;end loop;end mycursor_use ;end pack2;/
(2)在程序包内使用REF游标
create or replace package pack3istype refcur is ref cursor ;procedure mycursor_use;end pack3;/
create or replace package body pack3isprocedure mycursor_use ismycursor refcur;emp_rec scott.emp%rowtype;beginopen mycursor for select * from scott.emp;fetch mycursor into emp_rec ;while mycursor%found loopdbms_output.put_line('姓名为'||emp_rec.ENAME );fetch mycursor into emp_rec ;end loop;end mycursor_use ;end pack3;/
1.4 有关程序包的信息
user_objects 视图中包含用户创建的程序包信息
select * from user_objects where object_type in('PACKAGE','PACKAGE BODY');
user_source视图存储源代码
select * from user_source where name='TEST';
2. 内置程序包
用户sys拥有所有程序包,是公有同义词;
程序包名称 | 说明 |
---|---|
STANDARD和DBMS_STANDARD | 定义和扩展PL/SQL语言环境 |
DBMS_LOB | 提供对LOB数据类型进行操作的功能 |
DBMS_OUTPUT | 处理PL/SQL块和子程序输出调试信息 |
DBMS_RANDOM | 提供随机数生成器 |
DBMS_SQL | 允许用户使用动态SQL |
DBMS_XMLDOM | 用DOM模型读写XML类型数据 |
DBMS_XMLPARSER | XML解析,处理XML文档内容和结构 |
DBMS_XMLQUERY | 提供将数据转换为XML的功能 |
UTL_FILE | 用PL/SQL程序来读写操作系统文本文件 |
3. DBMS_JOB包
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务。
DBMS_JOB说明
如
(1)每分钟调用一次过程
创建表和过程:
create table a3(a date);
create or replace procedure test1asbegininsert into a3 values(sysdate);commit;end;/
定义变量接收job编号
variable job1 number;
提交任务:
begindbms_job.submit(:job1,'test1;',sysdate,'sysdate+1/1440');end;
–系统会自动分配一个任务号jobno。
删除job: dbms_job.remove(jobno);
修改要执行的操作: job:dbms_job.what(jobno, what);
修改下次执行时间:dbms_job.next_date(jobno, next_date);
修改间隔时间:dbms_job.interval(jobno, interval);
启动job: dbms_job.run(jobno);
停止job: dbms.broken(jobno, broken, nextdate); –broken为boolean值
启动任务
begindbms_job.run(:job1);end;
删除任务
begindbms_job.remove(:job1);end;/
4. UTL_FILE包
用于读写操作系统的文件,前提是创建路径(Directory)并授权。ORACLE目录的作用就是让ORACLE数据库和操作系统之前进行文件的交互。为了创建目录,必须具有DBA角色或者赋予了CREATE ANY DIRECTORY权限。如果普通用户被赋予了CREATE ANY DIRECTORY权限,那么用户就自动具备目录的READ和WRITE权限
utl_file说明
点击链接,查看到UTL_FILE包的异常说明:
如
(1)
sys用户创建目录
create or replace directory TEST_DIR as 'D:\c';
查看目录
select * from all_directories;
授权scott用户
--路径授权,添加对路径读、写权限
grant read,write on directory TEST_DIR to scott;--utl_file包授权,添加执行权限
GRANT EXECUTE ON utl_file TO scott;
读取文件
create or replace procedure read_file (path in varchar2,name varchar2)asl_output UTL_FILE.file_type;str varchar2(2000);begin l_output :=UTL_FILE.fopen(path ,name,'r',2000);loop UTL_FILE.get_line(l_output ,str);dbms_output.put_line(str );end loop;UTL_FILE.fclose(l_output );exception when NO_DATA_FOUND then UTL_FILE.fclose(l_output );end;
oracle 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包相关推荐
- code函数oracle列子,Oracle内置函数SQLCODE和SQLERRM的使用
Oracle内置函数SQLCODE和SQLERRM的使用 Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息. OTHERS ...
- oracle内部函数,[数据库]Oracle内置函数
[数据库]Oracle内置函数 0 2020-08-21 19:00:31 lpad()函数:用于左补全字符串. 例:lpad('原始数据','预期长度','填充字符') ,lpad('123','5 ...
- oracle 中least,ORACLE 内置函数之GREATEST和LEAST
Oracle比较一列的最大值或者最小值,我们会不假思索地用MAX和MIN函数,但是对于比较一行的最大值或最小值呢?是不是日常用的少,很多人都不知道有ORACLE也有内置函数实现这个功能:COALESC ...
- 利用Oracle内置分析函数进行高效统计汇总
利用Oracle内置分析函数进行高效统计汇总 分析函数是Oracle从8.1.6开始引入的一个新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者 ...
- ORACLE内置函数
ORACLE内置函数 一.内置函数的分类 二.转换函数 三.日期函数 四.字符串函数 五.数字函数 六.聚合函数 一.内置函数的分类 内置函数:Oracle自带的函数,我能只需要去调用就可以了. Or ...
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...
本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...
- Java语言中几个常用的包
Java语言中几个常用的包 Java采用包结构来组织和管理类和接口文件.本文介绍Java语言类库中几个常用的包,因为这几个包在软件开发与应用中经常需要用到,其中有些包是必要的.若是离开它,还真不能做事 ...
- Win11提示内置管理员无法激活此应用解决方法教学
Win11提示内置管理员无法激活此应用解决方法教学分享.最近有部分用户电脑开机使用的时候,出现了一个错误提示信息,显示"内置管理员无法激活此应用".出现这个提示后,需要使用的软件也 ...
- oracle怎么测试包,Oracle内置IO测试包dbms_resource_manager.CALIBRATE_IO
Oracle 11g开始,推出了内置的IO测试包,原理和上文提到的Orion工具基本相同.现在是具体使用的例子 SQL> select group_number, name, total_mb, ...
最新文章
- 支持向量机python代码_Python中的支持向量机SVM的使用(有实例)
- ROS 教程之 vision : 用各种摄像头获取图像
- 提升代码格调——JavaScript 数组的 reduce() 方法入门
- 【算法随记四】自动色阶、对比度、直方图均衡等算法的一些小改进。
- 没有别的厂家生产薯片?
- Web 组件完整介绍
- Adjoint of linear operator
- python背景颜色代码大全_Python实现转换图片背景颜色代码
- 投射电子显微镜(TEM)
- 中线提取算法_一种应用Visual Graph算法提取道路中线的专利_专利查询 - 天眼查...
- Atmel和SIGFOX在远程物联网连接领域开展合作
- 网站制作教程:PageAdmin建站系统在win2012上的安装
- 计算机安全凭据,4776 (S、F) 计算机尝试验证帐户的凭据。 (Windows 10) - Windows security | Microsoft Docs...
- 产品运营 | 浅谈漫画平台的数据与智能
- 家用小型UPS不间断电源—供电系统的保险
- 通过HttpURLConnection连接上传文件和参数并接收
- 解决vant sku 后台数据与前台数据绑定以及金额以分为单位问题
- 迅为STM32MP157开发板入门教程之外设功能验证
- Ultra-wideband Positioning Systems: Theoretical Limits, Ranging Algorithms, and Protocols
- Python 实现Excel 转 JSON
热门文章
- 复杂网络研究中的SIR传播模型(Python实现)
- 菲律宾苏禄省天主教堂连环爆炸造成20人死81人伤
- spss常态检验_【单选题】SPSS 软件中进行数据描述、 t 检验等分析的菜单是( )。
A. 文件 B. 数据 C. 转换 D. 分析...
- 区块链报错 5 | Contract has not been deployed to detect network (network/artifact mismatch)
- 软件需求工程 课堂笔记8
- Android开发最好笔记本,5最好的笔记本应用程序Android | MOS86
- 敏捷(Agile)是什么?--参加优普丰CSM认证培训有感
- hdu 2084 数塔(DP)
- CodeForces - 31D Chocolate【几何】【连通块】
- springBoot入门总结(八)使用 jta+atomikos 整合springBoot分布式事务