在这里讲一下包的概念,

二话不说上个例子

包头:

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. Hadoop实战课程

    Hadoop生态系统配置Hadoop运行环境Hadoop系统架构HDFS分布式文件系统MapReduce分布式计算(MapReduce项目实战)使用脚本语言Pig(Pig项目实战)数据仓库工具Hive ...

  2. 【JavaScript学习笔记】if使用

    <html> <body> <script language="JavaScript"> var a=4; var b=2; if(a==3) ...

  3. 【C#学习笔记】图片像素操作

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. valueOf intValue parsetInt区别

    1.int intValue() 以 int 类型返回该 Integer 的值. Long l = 123; l.intValue() ---->int : 123 2.static int p ...

  5. Hibernate-Native SQL

    1.标量(值)查询: sess.createSQLQuery("SELECT * FROM CATS").list(); sess.createSQLQuery("SEL ...

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

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

  7. Heritrix源码分析(十三) Heritrix的控制中心(大脑)CrawlController(二)

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/650744      本博客已迁移到本人独立博客: http://www.yun5u. ...

  8. Java中传值与传引用

    不管Java参数类型是什么,一律传递参数的副本. <Thinking In Java>:“When you're passing primitives into a method,you ...

  9. Java中String为什么是final

    final概念: 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父亲被继承.因此,一个类不能既被声明为abstract,又被声明为final. 将变量或方法声明为final,可以 ...

  10. 本地Git环境配置

    在Git Bash下获取源码时,提示permission denied publickey. 原因是本地帐号配置不正确,解决办法 生成SSH文件 1,进入Git Bash 2,  输入下面文字 ssh ...