oracle学习 十一 包+复合类型+自定义异常(持续更新)
在这里讲一下包的概念,

二话不说上个例子
包头:
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学习 十一 包+复合类型+自定义异常(持续更新)的更多相关文章
- 值得学习的C/C++开源项目 持续更新
值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...
- 【 js 基础 】【 源码学习 】源码设计 (持续更新)
学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...
- k8s学习之资料参考网址(持续更新)
此文章持续更新关于学习k8s生态的参考网址: 二进制方式搭建 (此部署方式是一步一步的部署,过程清晰) https://github.com/opsnull/follow-me ...
- Oracle学习(十一):PL/SQL
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...
- oracle学习 八 分页(使用rownumber)(持续更)
rownumber是查询的数据集之后加入一个伪列(连续的)使用它可以去制作以oracle数据库为基础的分页,语句类似于公式直接套用如下: select * from (select rownum r, ...
- oracle学习 九 游标的使用(持续更)
为什么要使用? 笔者查阅了一些资料之后得到的结论是, 关系型数据库是面向集合的,而游标是面向行的,游标可对取出来的集合(结果集)中每一行进行相同或不同的操作,还提供对基于游标位置而对表中数据进行删除或 ...
- c语言基础学习09_关于复合类型的复习
=============================================================================struct A{ char array[10 ...
- Oracle 11G DBMS包和类型参考
参阅:https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_lob.htm#ARPLS66712
- Linux 系统化学习系列文章总目录(持续更新中)
本页内容都是本人系统化学习Linux 时整理出来的.这些文章中,绝大多数命令类内容都是翻译.整理man或info文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...
随机推荐
- LA 3644 X-Plosives
最简单的并查集 多做做水题,加深一下理解 //#define LOCAL #include <cstdio> + ; int parent[maxn]; int GetParent(int ...
- Android隐藏虚拟按键,关闭开机动画、开机声音
/*********************************************************************** * Android隐藏虚拟按键,关闭开机动画.开机声音 ...
- HDU 5339 Untitled (暴力枚举)
题意:给定一个序列,要求从这个序列中挑出k个数字,使得n%a1%a2%a3....=0(顺序随你意).求k的最小值. 思路:排个序,从大的数开始模起,这是因为小的模完还能模大的么? 每个元素可以选,也 ...
- strust2 配置chainAction结果类型的配置
<result name="chainAction" type="chain"> <param name="actionName&q ...
- xp关不了机
自己测试:按第2点的设置既可成功1.点“开始→设置→控制面板→电源选项→高级电源管理”,如果你的机器支持高级电源管理功能,则选中“启用高级电源管理支持”:2.单击“开始”,并运行“regedit”,然 ...
- 几款免费的不用数据库的php的cms
免费不用数据库的php的cms 下面的几种内容采集系统都是英文版的,全部不需使用数据库,都是国外的免费并且开源CMS.对中文支持如何,你自己试试吧! 1.MuCMS一个小型,平台独立的内容管理系统适用 ...
- 内存泄露(OOM)现象及举例
一.HeapSize OOM(堆空间内存溢出) A.eg:List.add(" ")在一个死循环中不断的调用add却没有remove. B.并发导致. 解决方法有:1.代码提速.这 ...
- 为什么要用Java泛型
啥是泛型? 泛型(generic)是指参数化类型的能力.可以定义带泛型类型的类或方法,随后编译器会用具体的类型来代替它. 举个栗子 上述代码在编译期没有问题,但在运行期,将会报错.就是因为List的a ...
- 如何在vmware上创建共享磁盘
1.先在你本机的vmware安装目录上找到 vmware-vdiskmanager.exe 执行文件. 我的目录是 d:\vmware\vmware-vdiskmanager.exe 再用cmd终端( ...
- dos 实用命令收集
隐藏文件夹: H:\>attrib gho +h +s +r 解决win2012服务器上网慢:netsh int tcp set global ecn=disable