最近一段时间重温了oracle关于存储过程和oracle包以及function中的定义, 先看一下要用的表:

devices(id number, name varchar2, age number)

groups(id number, devicesid number, name varchar2, content varchar2)

在oracle中建立如下的package和package bodies,

下面给出里面具体的内容:

首先是packges下面的devices_pkg内容:

定义三个function和一个procedure

CREATE OR REPLACE PACKAGE DEVICES_PKG
IS TYPE MY_RESULTSET_CURSOR IS REF CURSOR; FUNCTION fun_add_device(
dev_id NUMBER,
dev_name VARCHAR2,
dev_age NUMBER)
RETURN NUMBER; FUNCTION fun_delete_device(dev_id NUMBER)
RETURN NUMBER; FUNCTION fun_Get_Test_Main_All
RETURN MY_RESULTSET_CURSOR; PROCEDURE pro_select_device(dev_id NUMBER, RS out MY_RESULTSET_CURSOR); END DEVICES_PKG;

然后是packages bodies里面的内容:

这里面主要是对上面定义的function和procedure的实现定义,

有简单的返回, 还有游标类型的返回;

CREATE OR REPLACE PACKAGE BODY DEVICES_PKG
AS FUNCTION fun_add_device(dev_id NUMBER,
dev_name VARCHAR2,
dev_age NUMBER)
RETURN NUMBER
IS
BEGIN
INSERT INTO devices VALUES (dev_id, dev_name, dev_age);
IF SQL%FOUND THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END fun_add_device; FUNCTION fun_delete_device(dev_id NUMBER)
RETURN NUMBER
IS
BEGIN
DELETE FROM devices WHERE id = dev_id;
IF SQL%FOUND THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END fun_delete_device; FUNCTION fun_Get_Test_Main_All
RETURN MY_RESULTSET_CURSOR
IS
return_cursor MY_RESULTSET_CURSOR;
BEGIN
OPEN return_cursor FOR 'SELECT d.id,d.name,d.age FROM devices d ORDER BY d.id ASC';
RETURN return_cursor;
END; PROCEDURE pro_select_device(dev_id NUMBER, RS out MY_RESULTSET_CURSOR)
IS
testCursor MY_RESULTSET_CURSOR;
testRec devices%ROWTYPE;
v_sql_select VARCHAR2(500);
BEGIN
v_sql_select := 'select
d.name, d.age, g.content
from devices d, groups g
where d.id ='|| dev_id ||
' and d.id = g.devicesid';
OPEN RS FOR v_sql_select;
testCursor := fun_Get_Test_Main_All();
LOOP
FETCH testCursor INTO testRec;
EXIT WHEN testCursor%NOTFOUND;
DBMS_OUTPUT.put_line('id:'||testRec.Id||',name:'||testRec.Name||',age:'||testRec.Age);
END LOOP;
END; END DEVICES_PKG;

这里给出其中一个调用的过程:

测试devices_pkg.pro_select_device这个存储过程,

输入dev_id为3,

结果rs为:

然后看一下DBMS输出是什么:

Oracle简单学习的更多相关文章

  1. Oracle简单学习笔记

    创建用户 CREATE USER username identified by password;//这是最简单的用户创建SQL语句. CREATE USER username identified ...

  2. Asp.Net MVC4 + Oracle + EasyUI 学习 序章

    Asp.Net MVC4 + Oracle + EasyUI  序章 -- 新建微软实例 本文链接:http://www.cnblogs.com/likeli/p/4233387.html 1.  简 ...

  3. Oracle RAC学习笔记:基本概念及入门

    Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章]    oracle 10g real applica ...

  4. Oracle RAC学习笔记01-集群理论

    Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...

  5. Oracle RMAN 学习:恢复

    Oracle RMAN 学习:恢复 6 rman恢复 Rman中的恢复对应restore,recover Restore,数据修复,利用备份集的数据文件来替换已损坏的数据文件或将其恢复到另外一个位置, ...

  6. Oracle Flushback 学习测试

    Oracle Flushback 学习测试:三思笔记 Flashback恢复 从9i开始,利用oracle查询的多版本一致的特点,实现从回滚段中读取一定时间内在表中操作的数据,被称为 flashbac ...

  7. Oracle基础学习笔记

    Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...

  8. Vagrant 安装Oracle19c RAC测试环境的简单学习

    1. 学习自网站: https://xiaoyu.blog.csdn.net/article/details/103135158 简单学习了下 能够将oracle RAC开起来了 但是 对后期的维护和 ...

  9. 简单学习一下ibd数据文件解析

    来源:原创投稿 作者:花家舍 简介:数据库技术爱好者. GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简单学习一下数据文件解析 这是尝试使用Golang语言简单解析My ...

随机推荐

  1. [ZJOI2009]取石子游戏

    瞪了题解两三天,直接下转第二篇题解就康懂了 首先我们令 : \(L[i][j]\) 表示当前 \([i,j]\) 区间左侧放置 \(L[i,j]\) 数量的石子后先手必败 \(R[i][j]\) 表示 ...

  2. SQL中的like '%%‘查询

    一,我们正常使用like时,这是有两个条件的模糊查询 select *From Test where UserName like '%m%' and UserName like '%a%' 二,但这时 ...

  3. CSS固定定位实现右下角可关闭广告

    代码: <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="UTF- ...

  4. ubuntu下载地址

    http://mirrors.aliyun.com/ubuntu-releases/16.04/

  5. ORI-621龙芯3A处理器CPCI刀片计算机

    ORI-621龙芯3A处理器CPCI刀片计算机 一.产品简介 ORI -621是一款基于龙芯3A国产CPU处理器的特种CPCI刀片计算机.该产品成功地实现了服务器NUMA架构在国产特种计算机中的应用, ...

  6. python 正则表达式教程(转)

    转自:https://zhuanlan.zhihu.com/p/28920775 本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检 ...

  7. less:匹配模式

    相当于JS中的if(不完全是),满足条件后才能匹配 .margin(top, @width: 5px) { margin: @width 0 0 0; } .margin(right, @width: ...

  8. node.js从入门到放弃《模块》

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  9. Nginx-常用命令和配置文件

    Nginx常用命令 1.启动命令 在/usr/local/nginx/sbin 目录下执行 ./nginx 2.关闭命令 在/usr/local/nginx/sbin 目录下执行 ./nginx s ...

  10. ubuntu + JetSonNano+OpenCV3.4.8

    首先强调一点,如果要配置darknet环境,不建议安装该版本!!! 安装opencv前,建议先检测自己的系统是否已经装过其他版本, 检查方式: (1)查看是否安装opencv库: pkg-config ...