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文档总结出来的,所以相对都比较完整. 本人的写作方式.风格也可能会让朋友一看就恶心到直接 ...
随机推荐
- Asp.Net判断字符是否为汉字的方法大全
判断一个字符是不是汉字通常有三种方法: 第一种用 ASCII 码判断,缺点:把全角逗号“,”当汉字处理 第二种用汉字的 UNICODE 编码范围判 断, 第三种用正则表达式判断 1.用ASCII码判断 ...
- JS改变input的value值不触发onchange事件解决方案 (转)
方法(一)(转载的网络资料) 需要了解的知识 首先,我们需要了解onchange和onpropertychange的不同: IE下,当一个HTML元素的属性改变的时候,都能通过 onprope ...
- acdream 1682 吃不完的糖果(环形最大子段和)
Problem Description 娜娜好不容易才在你的帮助下"跳"过了这个湖,果然车到山前必有路,大战之后必有回复,大难不死,必有后福!现在在娜娜面前的就是好多好多的糖果还有 ...
- ecshop 文章列表页调用描述信息啊
1.打开 includes/lib_article.php文件 将 $sql = 'SELECT article_id, title, author, add_time, file_url, open ...
- 【英语】Bingo口语笔记(47) - 关于马的表达
beat a dead horse 浪费口舌
- Linux/Unix shell 自动发送AWR report(二)
观察Oracle数据库性能,Oracle自带的awr 功能为我们提供了一个近乎完美的解决方案,通过awr特性我们可以随时从数据库提取awr报告.不过awrrpt.sql脚本执行时需要我们提供一些交互信 ...
- Android EventBus源码解析
项目地址 :https://github.com/greenrobot/EventBus 这个项目个人感觉就是为了解决回调事件过多的,比方说A函数在做完以后 要调用b类的c函数,那我们通常的做法就是 ...
- 使用 XML 实现 REST 式的 SOA
什么是 SOA? 如果公司有大量应用程序,这些程序供不同部门的承担不同责任的职员使用,那么就适合使用面向服务体系结构(Service Oriented Architecture,SOA).这些应用程序 ...
- ANT 发布项目中 build.xml 文件的详细配置
xml 代码 <?xml version="1.0" encoding="UTF-8"?> <!-- name:对应工程名字 default: ...
- 开发环境配置(netbeans+ant迁移到eclipse+maven)
新公司入职,接手一个离职人员的项目,拿到的源码是以一个压缩包,用netbeans开发,ant管理:前端:jsp+extjs,后端:springmvc+hibernate+activiti+spring ...