在这里讲一下包的概念,

二话不说上个例子

包头:

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. UVa 340 Master-Mind Hints

    蛋疼的题目描述,看了好长好长时间才看懂,题目本身是很简单的. Designer给出一串长度为N的Code,Breaker用Guess来破译. 对于两串数字,如果有同一列相等的数字,那么叫做strong ...

  2. 51nod1274 最长递增路径

    将边排序后dp一下就可以了. #include<cstdio> #include<cstring> #include<cctype> #include<alg ...

  3. Sqlserver高级查询

    1.查询表结构 --查询表结构(字段名.字段类型.字段长度.能否为空) SELECT syscolumns.name,systypes.name, syscolumns.length ,syscolu ...

  4. yaf框架流程三

    路由的原理请看http://yaf.laruence.com/manual/yaf.routes.html这个链接 要点:路由的顺序是堆栈模式的,及最后添加的路由规则最优先.由上两篇可知,定义的第一条 ...

  5. SAS Config文件 处理流程

    Processing Options Specified by Additional CONFIG Options You can also specify additional –CONFIG op ...

  6. ssl创建自签名的https通信

    ssl协议:ssl在tcp之上,http之下.兼容底层协议.所以推广起来很容易. create a self-signed server certificate -- for test purpose ...

  7. 【转】Cocos2d-x下Lua调用自定义C++类和函数的最佳实践

    转自:http://segmentfault.com/blog/hongliang/1190000000631630 关于cocos2d-x下Lua调用C++的文档看了不少,但没有一篇真正把这事给讲明 ...

  8. 锋利的jQuery读书笔记---jQuery中Ajax--序列化元素、Ajax全局事件

    serialize()方法: 作用于一个jQuery对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. <!DOCTYPE html> <html> <hea ...

  9. 理解javascript的caller,callee,call,apply概念

    在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments[ ...

  10. smarty缓存函数

    原来在Smarty中在3.0以上版本中不在使用这个clear_all_cache(),而是以$smarty->clearAllCache(); 代替.其中$smarty->clear_ca ...