在这里讲一下包的概念,

二话不说上个例子

包头:

create or replace package pck_test is
procedure proc_report_salary(name nvarchar2,v_class_name out nvarchar2);
function func_report_salary(v_month nvarchar2, v_year nvarchar2) return number;
end pck_test;

包体:

create or replace package body pck_test is
--存储过程
procedure proc_report_salary
(
name nvarchar2,
v_class_name out nvarchar2
)
is
--v_class_name nvarchar2(50) ;
begin
v_class_name:='初始值';
select class_name into v_class_name from t_user_class_info
inner join t_user_info on
t_user_class_info.class_id=t_user_info.class_id
where t_user_info.user_name=name;
end;
--函数
function func_report_salary
(
v_month nvarchar2,
v_year nvarchar2
)
return number is
PRAGMA AUTONOMOUS_TRANSACTION; d1 number;
d2 number;
v_id number;
begin select count(*) into d1 from t_user_info where user_month=v_month;
select sum(user_id) into d2 from t_user_info where user_year=v_year;
select rid.nextval into v_id from dual;
insert into tab_report_list(sid,d1,d2)values(rid.nextval,d1,d2);
commit;
return v_id; EXCEPTION
WHEN no_data_found THEN
commit;
v_id:=0;
WHEN OTHERS THEN
commit;
v_id:=0; end ;
end pck_test;

包类似于程序里面的写出接口,实现接口的概念,但是需要注意的是由于不同的编译工具写法也导致了不同,如果是SQL PLUS在包头和包体之间可以使用“/”,如果是plsql则包头和包体要放在两个sql windows里面写,不然会报错,使用包可以更好的管理你的函数和存储过程以及函数或者变量等,调用的时候有点像程序里面类调用方法的感觉,例子如下:

declare
v_ret nvarchar2(50);
begin
--类.方法(参数)可以使用这样的方式去想
pck_test.proc_report_salary('小明',v_ret);
dbms_output.put_line(v_ret);
end;

如果你是想要单独的写一个函数或者存储过程,你可以吧包体里面的函数或者存储过程部分单独拿出来加上create[or repleace] 放在一个新建页面执行即可。

接下来看一下自定义的复合类型的写法:

记录类型:

就是说这个类型可以是emp表里面姓名,薪水,标题,工作的字段类型。

调用的时候有类似于

var_record emp_record_type;

var_record.name:='张三'

这样的方式进行赋值

数组类型:

游标:(参考类型的一种)

其中的loop是循环的语法

自定义例外类似于程序里面的自定义try catch,另外注意的是,最好在每个函数和存储过程里面都有定义常见的异常和例外保证程序的完整性。

自定义例外如下:

oracle学习 十一 包+复合类型+自定义异常(持续更新)的更多相关文章

  1. 值得学习的C/C++开源项目 持续更新

    值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...

  2. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  3. k8s学习之资料参考网址(持续更新)

    此文章持续更新关于学习k8s生态的参考网址:  二进制方式搭建 (此部署方式是一步一步的部署,过程清晰)            https://github.com/opsnull/follow-me ...

  4. Oracle学习(十一):PL/SQL

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...

  5. oracle学习 八 分页(使用rownumber)(持续更)

    rownumber是查询的数据集之后加入一个伪列(连续的)使用它可以去制作以oracle数据库为基础的分页,语句类似于公式直接套用如下: select * from (select rownum r, ...

  6. oracle学习 九 游标的使用(持续更)

    为什么要使用? 笔者查阅了一些资料之后得到的结论是, 关系型数据库是面向集合的,而游标是面向行的,游标可对取出来的集合(结果集)中每一行进行相同或不同的操作,还提供对基于游标位置而对表中数据进行删除或 ...

  7. c语言基础学习09_关于复合类型的复习

    =============================================================================struct A{ char array[10 ...

  8. Oracle 11G DBMS包和类型参考

    参阅:https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_lob.htm#ARPLS66712

  9. Linux 系统化学习系列文章总目录(持续更新中)

    本页内容都是本人系统化学习Linux 时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...

随机推荐

  1. Windows下PhpStorm结合WAMP开发Phalcon应用的配置

    最近要利用Phalcon框架开发PHP应用,因为以前基本没接触过PHP更没用过PHP框架,结果整环境整IDE配置什么的花了好长时间 学习慕课网上的PHP入门教程安装了WAMP(windows+apac ...

  2. HDU 4606 Occupy Cities ★(线段相交+二分+Floyd+最小路径覆盖)

    题意 有n个城市,m个边界线,p名士兵.现在士兵要按一定顺序攻占城市,但从一个城市到另一个城市的过程中不能穿过边界线.士兵有一个容量为K的背包装粮食,士兵到达一个城市可以选择攻占城市或者只是路过,如果 ...

  3. 递归神经网络(Recurrent Neural Networks,RNN)

    在深度学习领域,传统的多层感知机(MLP)具有出色的表现,取得了许多成功,它曾在许多不同的任务上——包括手写数字识别和目标分类上创造了记录.甚至到了今天,MLP在解决分类任务上始终都比其他方法要略胜一 ...

  4. CSS hack——不同浏览器的CSS应对法

    1.IE条件注释法: lte表示“小于等于”,“lt”表示“小于”,“gte”表示“大于等于”,“gt”表示“大于”,“!”表示“不等于”. <!--[if IE 6]> <link ...

  5. Java 中无参带返回值方法的使用

    如果方法不包含参数,但有返回值,我们称为无参带返回值的方法. 例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值为 int 类型的方法,执行的操作为计算两数之和,并返回结果 在 c ...

  6. Android通过代码获取View

    View view = LayoutInflater.from(mContext).inflate(R.layout.song_item_adapter, null); LayoutInflater ...

  7. 嵌入式 hi3518平台获取网关

    </pre><pre code_snippet_id="495447" snippet_file_name="blog_20141024_1_70650 ...

  8. memcache、memcached、groupcache的区别

    对PHP语言来说,PHP使用memcache有两个模块,分别叫memcache和memcached,他们的区别看下表: 参考:http://hi.baidu.com/tony_wd/item/605e ...

  9. python+selenium环境搭建

    这里主要基于windows平台. 下载python.http://python.org/getit/ 下载setuptools [python的基础包工具].http://pypi.python.or ...

  10. 为我所用之Monkey

    文章由来:有朋友问到Monkey的使用的问题,就整理一下Monkey的基本使用,以备后用查询. Monkey是一Android中的一个命令行工具,eclipse中有自带此工具,可以运行在模拟器以及真实 ...