Oracle中包的使用

Oracle 包详解(package) 文章目录1 概述2 示例3 请注意 1 概述 1. 包的概念 (1) 模块化的思想,用于分类管理过程(procedure)和函数(function) (2) 类似于 Java、Python 等语言中的 类(class) 2. 包的组成(程序部署顺序:'先执行包头,再执行包体') (1) 包头:package (2) 包体:package body 3. 授权: grant execute on 属主.包名 to 用户1, 用户n; 4. 调用: '属主.包名.存储过程名()' 或 '属主.包 阅读详情

Oracle中包的使用

包头

创建语法

create  [or  replace]  package  package_name {IS|AS}

type_definition |

procedure_specification |

function_specification |

variable_declaration |

exception_declaration |

cursor_declaration |

pragma_declaration

end  [package_name];

简单案例

包作用:

可以把一些过程和函数组织到一起,把PL/SQL代码模块化,构建其他人员重用的代码

 

包的说明

也叫包头,包含了有关包内容的信息

create   or   replace   ClassPackage   As

--Add  a  new  student  into  the  specified  class

PROCEDURE   AddStudent   (p_studentID   in   students.id%type,

  p_department   in  classes.department%type,

  p_course   in  classes.course%type);

--Remove  the  specified  student  from  the  specified  class

PROCEDURE   RemoveStudent   (p_studentID   in  students.id%type,

  p_department   in  classes.department%type,

  p_course   in   classes.course%type);

--Exception  raised  by  RemoveStudent

e_studentNotRegistered   EXCEPTION;

--Table  type  used  to  hold  student  info

TYPE   t_studentIDTable   is   table   of  students.id%type

index   by   binary_integer;

--Return  a  PL.SQL  table  containing  the  students.id%type

--in  the  specified  class

PROCEDURE   ClassList(p_department   in   classes.department%type,

  p_course   in  classes.course%type,

  p_IDs   out   t_studentIDTable,

  p_NumStudents   in   out   binary_integer);

end   ClassPackage;

包体

包体是独立于包头的数据字典对象,包头完成编译之后才能进行编译,包体中带有实现包头中描述的前向子程序的代码段。

------------------创建包头----------------------------

create   or   replace   ClassPackage   As

--Add  a  new  student  into  the  specified  class

PROCEDURE   AddStudent   (p_studentID   in   students.id%type,

  p_department   in  classes.department%type,

  p_course   in  classes.course%type);

--Remove  the  specified  student  from  the  specified  class

PROCEDURE   RemoveStudent   (p_studentID   in  students.id%type,

  p_department   in  classes.department%type,

  p_course   in   classes.course%type);

--Exception  raised  by  RemoveStudent

e_studentNotRegistered   EXCEPTION;

--Table  type  used  to  hold  student  info

TYPE   t_studentIDTable   is   table   of  students.id%type

index   by   binary_integer;

--Return  a  PL.SQL  table  containing  the  students.id%type

--in  the  specified  class

PROCEDURE   ClassList(p_department   in   classes.department%type,

  p_course   in  classes.course%type,

  p_IDs   out   t_studentIDTable,

  p_NumStudents   in   out   binary_integer);

end   ClassPackage;

 

---------------创建包体------------------------------

create  or  replace  package  BODY  ClassPackage  AS

---------------添加学生------------------------------

procedure  AddStudent

(

           p_studentID  in  students.id%type,

           p_department  in  classes.department%type,

           p_course  in  classes.course%type

) IS

begin

  insert  into  registered_students (student_id,department,couse)

  values  (p_studentID,p_department,p_course);

end  AddStudent;

---------------删除学生-------------------------------

procedure  RemoveStudent

(

           p_studentID  in  students.id%type,

           p_department  in  classes.department%type,

           p_course  in  classes.course%type

) IS

begin

  delete  from  registered_students

  where  student_id = p_studentID

  and  department = p_department

  and  couse = p_course

if  SQL%NOTFOUND  then

  raise  e_StudentNotRegistered;

endif;

end RemoveStudent;

-------------这里可以使用包头中声明的变量,异常等----

procedure  ClassList

(

           p_department  in  classes.department%type,

           p_course  in  classes.course%type,

           p_IDs  out  t_studentIDTable,

           p_NumStudents  in  out  binary_integer

) IS

v_studentID  registered_students.student_id%type;

CURSOR  c_registeredStudents  IS

select  student_id

from  registered_students

where  department = p_dapartment

and  course = p_course;

begin

p_NumStudents:=0;

open  c_registeredStudents;

loop

fetch  c_registeredStudents  into  v_StudentID;

exit  when  c_registeredStudents%NOTFOUND;

p_NumStudents:=p_NumStudents+1;

p_IDs(p_NumStudents):=v_StudentID;

end  loop;

end  ClassList;

end ClassPackage;

重载

在包的内部,过程和函数可以被重载,也就是说,可以存在多个名称相同的,但是参数不同的过程和函数。重载允许相同的操作执行在不同的对象上。

 

重载过程

create  or  replace  package  ClassPackage  AS

----方式一:

procedure  AddStudent

(

           p_StudentId  in  students.id%type,

           p_Department  in  classes.department%type,

           p_Course  in  classes.course

)

----方式二:

procedure  AddStudent

(

           p_FirstName  in  students.first_name%type,

           p_LastName  in  students.last_name,

           p_Department  in  classes.department%type,

           p_Course  in  classes.course%type

)

.....

end  ClassPackage;

create  or  replace  packageBODY  ClassPackage  AS

----重载:第一种方式添加学生

procedure  AddStudent

(

           p_StudentId  in  students.id%type,

           p_Department  in  classes.department%type,

           p_Course  in  classes.course

) IS

begin

  insert  into  register_student(student_id,department,course)

  value  (p_StudentId,p_Department,p_Course);

end  AddStudent;

----重载:第二种方式添加学生

procedure  AddStudent

(

           p_FirstName  in  students.first_name%type,

           p_LastName  in  students.last_name%type,

           p_Department  in  classes.department%type,

           p_Course  in  classes.course%type

) IS

v_StudentID  students.ID%type;

begin

  select  ID  into  v_StudentID

  where  first_name=p_FirstName

  and  last_name=p_LastName;

  insert  into  register_student(student_id,department,course)

  value  (v_StudentID,p_Deparment,p_Course);

end  AddStudent;

....

end  ClassPackage;

 

使用重载

----过程一:

Begin

  ClassPackage.AddStudent('10001','财务','6666');

end;

----过程二:

Begin

  ClassPackage.AddStudent('hello','world','事业','7777');

end;

Oracle的内置包

1.  DBMS_ALERT:数据库报警,允许会话间通讯

2.  DBMS_JOB:任务调度服务

3.  DBMS_LOB:大型对象操作

4.  DBMS_PIPE:数据库管道,允许会话间通讯

5.  DBMS_SQL:执行动态SQL

6.  UTL_FILE:文本文件的输入输出

【mysql8.0.33安装详情教程】 8、进入Account and Roles界面,输入密码,再点击next(密码随便输,自己记住就行)11、进入Apply Configuration界面,直接点Execute,等待应用成功。14、输入密码,点击check,检查是否正确。3、下图是选择安装类型,选择默认安装就可以,然后点击“next”。5、进入Product Configuration,点击next。9、进入Windows Service界面,直接点击next。15、点击Execute执行安装(完成后点击Finish)二、验证是否安装成功。 阅读详情

相关推荐

winget安装提示:执行此命令时发生意外错误: InternetOpenUrl() failed. 0x80072efd

当我们使用Winget包管理器安装应用,提示错误:执行此命令时发生意外错误: InternetOpenUrl() failed. 0x80072efd 该怎么处理呢?请听我娓娓道来。

Linux I Tell U 8136

12-Oracle包的定义与使用

本章内容 1.包概述 2.包的创建 3.包的调用 4.包重载 5.包的初始化 6.包的持续性 7.包的串行化 8.包的管理

软件之家的博客 1937

详细对比模型训练和模型精调

当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。

pumpkin84514的博客 1852

Oracle数据库中的包的介绍及示例

Oracle数据库中的包的介绍及示例

weixin_42064877的博客 2278

IPSec Over GRE和GRE Over IPSec技术

IPSec Over GRE 和 GRE Over IPSec 一. 技术介绍 IPsec     主要作用是对数据进行加密,因为他能提供所有有时候被单独用作实现加密的一种方法!IPsec建立的是一个逻辑隧道,并不是真正意义上的隧道!并且不能提供路由功能,因为IPsec不支持非ip流量,也不支持广播(组播)! GRE     (通用路由封装)能很好的提供一个真正意义上的点对点的隧道,GRE是一种三层VPN封装技术。GRE可以对某些网络层协议(如IPX、Apple Talk、IP等)的报文进行封装,使封装后

qq_56228347的博客 9868

比亚迪唐/秦开发者必看:253个车辆接口实战指南(附常用功能调用示例)

本文为比亚迪唐/秦开发者提供了一份详尽的车辆接口实战指南。文章聚焦于比亚迪开放的253个车辆接口,从开发环境搭建、核心状态监控到高频控制功能(如空调与充电管理),结合真实代码示例,帮助开发者快速上手并规避常见问题,高效开发车载应用。

weixin_28327051的博客 609

Oracle程序包

Oracle程序包

qq_37682117的博客 630

BIOS更新后PIN不可用怎么办?从原理到实操的完整修复指南

在计算机维护中,BIOS更新是常见的固件升级操作,但其引发的登录异常却常让用户措手不及。Windows Hello PIN并非传统密码,它通过TPM芯片与设备启动环境(PCR状态)强绑定,一旦主板固件或安全启动配置改变,TPM便会拒绝释放密钥,导致“由于此设备上的更改,你的PIN不再可用”。理解这一原理后,恢复路径清晰可控:优先尝试密码登录,或通过WinRE替换utilman.exe创建临时管理员,必要时还需处理BitLocker恢复密钥。本文面向系统维护与数据安全场景,系统梳理PIN失效的恢复流程与避坑方

weixin_31364787的博客 360

Oracle数据库中的包(七)

Oracle数据库中的包(七)

Keep_Trying_Go的博客 2474

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 420

深度解析与实战:长短时记忆网络(LSTM)在股票走势预测中的应用(基于Python + PyTorch)

本文全面探讨了LSTM在股票价格预测中的应用,从理论基础到实践操作。文章首先强调了股票市场预测的重要性,并介绍了LSTM网络结构及其在处理时间序列数据中的优势。接着,详细说明了数据预处理的关键步骤,包括数据收集、清洗、特征选择和归一化。文章还讨论了LSTM模型的构建、训练和评估,并提供了Python及PyTorch的实操案例。最后,总结了LSTM在股票预测的成果,并提出了未来研究的方向,如模型优化和特征工程,旨在帮助读者掌握LSTM在股票价格预测中的应用,并探索提升模型性能的方法。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2100

【Oracle】包

在PL/SQL程序开发中,为了方便实现模块化程序的管理,可以将PL/SQL元素(如存储过程、函数、变量、常量、自定义数据类型、游标等)根据模块的程序结构组织在一起,存放在一个包中,称为一个完整的单元,并在编译之后存储在数据库服务器中,作为一种全局结构,供应用程序调用。在Oracle数据库中,包有两类,一类是系统内置的包,每个包实现特定的应用过程、函数、常量等的集合,如DBMS_OUTPUT.put_line()就是调用了DBMS_OUTPUT包中的put_line()函数;另一类是根据应用需要由用户创建的包

奥利文儿的博客 1992

深度强化学习训练结果曲线绘制教程

使用python语言,只调用matplotlib库,绘制训练过程中保存的强化学习训练曲线。模仿经典论文中的训练曲线,多次训练取平均,并绘制出阴影区域。

加斯顿工程师的博客 910

oracle创建包方法,oracle包的创建

一 包的组成1)包头(package):包头部分申明包内数据类型,常量,变量,游标,子程序和异常错误处理,这些元素为包的公有元素。2)包主体(package body):包主体则是包定义部分的具体实现,它负责为包头中所声明子程序提供具体的实现,在包主体中还可以声明包的私有元素3)包头和包主体分开编译,并作为两个分开的对象分别存放在数据库字典中--删除package--drop package pk...

weixin_26704885的博客 3225

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

oracle包定义,oracle中包的定义及使用

包的作用:包可以将任何出现在块声明的语句(过程,函数,游标,游标,类型,变量)放于包中,相当于一个容器.将声明语句放入包中的好处是:用户可以从其他PL/SQL块中对其进行引用,因此包为PL/SQL提供了全程变量.包分为两部分:包头和包体.如何创建包?1)包头:语法格式:CREATE OR REPLACE PACKAGE package_name /*包头名称*/IS|AS pl/sql_packa...

weixin_28877739的博客 633

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

oracle怎么使用包,oracle 包 简单使用

理解PL/SQL包简介包(package)的主要作用是用于逻辑组合相关的PL/SQL类型比如记录类型或者集合类型,PL/SQL游标或游标声明以及PL/SQL子程序还可以包含任何可以在块的声明区中定义的变量或者说是将功能或业务相似的存储过程,函数以及类型等进行一个封装包的组成一个PL/SQL包由如下两部分组成包规范(包声明)包规范: 主要是包的一些定义信息,不包含具体的代码实现部分也可以说包规范是P...

weixin_34050521的博客 514

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

oracle 包 及 包调用

create package testpack --创建一个包头,里面定义变量和方法名称,方法参数,返回值类型 is                                    v_tax number;                 v_s number;                   Function tax(v_money number) return number

wangchen2633的博客 9569

oracle包

包是一个对象,只能整体授权,不能把包中一个对象的使用权限单独授予某个用户。 grant execute on pack_name to hbk; 包的编译 alter package pack_first compile package; 对包头进行编译 alter package pack_first compile specification; 对包体进行编译 alter package...

huangbaokang的博客 1194

oracle 包的管理

在PL/SQL程序开发中,为了方便实现模块化程序的管理,可以将PL/SQL元素(如存储过程、函数、变量、常量、自定义数据类型、游标等)根据模块的程序结构组织在一起,存放在一个包中,称为一个完整的单元,并在编译之后存储在数据库服务器中,作为一种全局结构,供应用程序调用。在Oracle数据库中,包有两类,一类是系统内置的包,每个包实现特定的应用过程、函数、常量等的集合,如DBMS_OUTPUT.put_line()就是调用了DBMS_OUTPUT包中的put_line()函数;包的创建包括包规范和包体的创建。

qq_22201881的博客 834

oracle 查看包定义,Oracle Package包的定义及使用

Oracle的package包主要用于组织归类相关的函数及存储过程,包的创建包括两分部:包的定义、包体的定义。包的定义主要包括包名和包内函数、存储过程的声明,相当于API接口定义;包体主要是包内各函数和存储过程的实现;创建包体前必须先创建包。包的定义:CREATE OR REPLACE PACKAGE vastcm_utils ISFUNCTION is_table_exists( table_n...

weixin_39872893的博客 1223

oracle查看包的定义,oracle包的创建

一 包的组成1)包头(package):包头部分申明包内数据类型,常量,变量,游标,子程序和异常错误处理,这些元素为包的公有元素。2)包主体(package body):包主体则是包定义部分的具体实现,它负责为包头中所声明子程序提供具体的实现,在包主体中还可以声明包的私有元素3)包头和包主体分开编译,并作为两个分开的对象分别存放在数据库字典中--删除package--drop package pk...

weixin_30305029的博客 607

oracle 包的使用,我的宝~

oracle之包:我的宝!1、包的概念性问题2、包定义(包规范、包头)与包体3、课堂练习:定义包规范(就是包定义),分别定义存储过程完成部门信息的添加和删除操作,定义函数实现根据传递的部门号返回部门信息。 1、包的概念性问题 包是一组相关过程、函数、变量、常量和游标等pl/sql程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些程序单元的封装。 包分为包定义(包规范、包头)和包体两部分 包定义包括数据类型、变量、常量、游标、子程序和异常等元素,这些元素为包的公有元素。 包体则是包定义部分的具体实

hey,欢迎浏览我的博客,希望能给你提供帮助。 688

Oracle包

Oracle包 一、包的概念 PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包的构造。 (1)包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位,是一组相关过程、函数、变量、常量和游标等PL/SQL程序设计元素的组合,它具有面向对象程序设计语言的特点,是对这些PL/SQL 程序设计元素的封装。 (2)包类似于C 和JAV

塔山上的山 530

oracle 包实例,图解Oracle包实例

以下使用SQL Developer,使用Oracle SCOTT账号自带emp表,创建包。 1在包中定义record类型,并在匿名块中调用 --在包中自定义类型 create or replace package my_bao as type emp_type is record( gh emp.empno%type, xm emp.ename%type, gz emp.sal%type );以下...

weixin_36071315的博客 254

oracle 包 简单使用

理解PL/SQL包 简介 包(package)的主要作用是用于逻辑组合相关的PL/SQL类型 比如记录类型或者集合类型,PL/SQL游标或游标声明以及PL/SQL子程序 还可以包含任何可以在块的声明区中定义的变量 或者说是 将功能或业务相似的存储过程,函数以及类型等进行一个封装 包的组成 一个PL/SQL包由如下两部分组成 包规范(包声明) 包规范: 主要是包的一些定义信...

e61015656pub的博客 261

oracle 包怎么调用,【Oracle】包及包的调用

1.概述包用于将相关的对象组合在一起,一个任务,需要多个函数或者过程协同才能完成,这时,可以这些函数和存储过程都放在一个包下,方便函数和存储过程的管理,提高程序的性能,在第一次用的时候,会全部读入内存,下次用直接从内存取,加强模块化。包分为两部分:1.包头(类似java接口)包的规范,只包含了函数或存储过程的说明部分创建包头语法:create [or replace] package 包名 is|...

weixin_28733803的博客 2602
上一篇: JavaWeb的Filter过滤器
下一篇: Spring整合C3P0和quartz和hibernate
午-夜
博客等级 码龄12年 95粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值