文章目录

  • 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 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包相关推荐

  1. code函数oracle列子,Oracle内置函数SQLCODE和SQLERRM的使用

    Oracle内置函数SQLCODE和SQLERRM的使用 Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息. OTHERS ...

  2. oracle内部函数,[数据库]Oracle内置函数

    [数据库]Oracle内置函数 0 2020-08-21 19:00:31 lpad()函数:用于左补全字符串. 例:lpad('原始数据','预期长度','填充字符') ,lpad('123','5 ...

  3. oracle 中least,ORACLE 内置函数之GREATEST和LEAST

    Oracle比较一列的最大值或者最小值,我们会不假思索地用MAX和MIN函数,但是对于比较一行的最大值或最小值呢?是不是日常用的少,很多人都不知道有ORACLE也有内置函数实现这个功能:COALESC ...

  4. 利用Oracle内置分析函数进行高效统计汇总

    利用Oracle内置分析函数进行高效统计汇总 分析函数是Oracle从8.1.6开始引入的一个新的概念,为我们分析数据提供了一种简单高效的处理方式.在分析函数出现以前,我们必须使用自联查询,子查询或者 ...

  5. ORACLE内置函数

    ORACLE内置函数 一.内置函数的分类 二.转换函数 三.日期函数 四.字符串函数 五.数字函数 六.聚合函数 一.内置函数的分类 内置函数:Oracle自带的函数,我能只需要去调用就可以了. Or ...

  6. [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...

    本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...

  7. Java语言中几个常用的包

    Java语言中几个常用的包 Java采用包结构来组织和管理类和接口文件.本文介绍Java语言类库中几个常用的包,因为这几个包在软件开发与应用中经常需要用到,其中有些包是必要的.若是离开它,还真不能做事 ...

  8. Win11提示内置管理员无法激活此应用解决方法教学

    Win11提示内置管理员无法激活此应用解决方法教学分享.最近有部分用户电脑开机使用的时候,出现了一个错误提示信息,显示"内置管理员无法激活此应用".出现这个提示后,需要使用的软件也 ...

  9. oracle怎么测试包,Oracle内置IO测试包dbms_resource_manager.CALIBRATE_IO

    Oracle 11g开始,推出了内置的IO测试包,原理和上文提到的Orion工具基本相同.现在是具体使用的例子 SQL> select group_number, name, total_mb, ...

最新文章

  1. 支持向量机python代码_Python中的支持向量机SVM的使用(有实例)
  2. ROS 教程之 vision : 用各种摄像头获取图像
  3. 提升代码格调——JavaScript 数组的 reduce() 方法入门
  4. 【算法随记四】自动色阶、对比度、直方图均衡等算法的一些小改进。
  5. 没有别的厂家生产薯片?
  6. Web 组件完整介绍
  7. Adjoint of linear operator
  8. python背景颜色代码大全_Python实现转换图片背景颜色代码
  9. 投射电子显微镜(TEM)
  10. 中线提取算法_一种应用Visual Graph算法提取道路中线的专利_专利查询 - 天眼查...
  11. Atmel和SIGFOX在远程物联网连接领域开展合作
  12. 网站制作教程:PageAdmin建站系统在win2012上的安装
  13. 计算机安全凭据,4776 (S、F) 计算机尝试验证帐户的凭据。 (Windows 10) - Windows security | Microsoft Docs...
  14. 产品运营 | 浅谈漫画平台的数据与智能
  15. 家用小型UPS不间断电源—供电系统的保险
  16. 通过HttpURLConnection连接上传文件和参数并接收
  17. 解决vant sku 后台数据与前台数据绑定以及金额以分为单位问题
  18. 迅为STM32MP157开发板入门教程之外设功能验证
  19. Ultra-wideband Positioning Systems: Theoretical Limits, Ranging Algorithms, and Protocols
  20. Python 实现Excel 转 JSON

热门文章

  1. 复杂网络研究中的SIR传播模型(Python实现)
  2. 菲律宾苏禄省天主教堂连环爆炸造成20人死81人伤
  3. spss常态检验_【单选题】SPSS 软件中进行数据描述、 t 检验等分析的菜单是( )。 A. 文件 B. 数据 C. 转换 D. 分析...
  4. 区块链报错 5 | Contract has not been deployed to detect network (network/artifact mismatch)
  5. 软件需求工程 课堂笔记8
  6. Android开发最好笔记本,5最好的笔记本应用程序Android | MOS86
  7. 敏捷(Agile)是什么?--参加优普丰CSM认证培训有感
  8. hdu 2084 数塔(DP)
  9. CodeForces - 31D Chocolate【几何】【连通块】
  10. springBoot入门总结(八)使用 jta+atomikos 整合springBoot分布式事务