最近一段时间重温了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. window.onload后跟函数 和跟函数名的区别【window.onload = asd() 和 window.onload = asd 】

    window.onload:页面加载完毕执行[DOM tree + 外部图片 + 资源] <script> function asd(){ return 10; } window.onlo ...

  2. EA逆向生成数据库E-R图(mysql数据库-->ER图)

    [1]选择 工具-->ODBC-Data-Sources [2]ODBC数据源管理器  ,点击添加 [3]选择一个mysql驱动  ,点击MySQL ODBC 5.1 Driver(其它同理), ...

  3. element 弹框关闭报错

    <template> <el-container style="padding: 00px 20px 0px 20px"> <el-dialog ti ...

  4. Jsp 自定义tag标签

    1转自:https://blog.csdn.net/yusimiao/article/details/46835617 Jsp自定义tag标签 自定义tag标签的好处 程序员可以自定一些特定功能的标记 ...

  5. jQuery学习总结05-事件

    1.事件的发生 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. Python之列表、元组、字典、集合及字符串的详细使用

    1.列表 列表相当与C++中的数组,是有序的项目, 通过索引进行查找,但使用起来却方便很多,具体的操作看代码,自己实践一次就非常简单了. 注:列表一般用中括号“[ ]” #列表(数组) name_li ...

  7. 用C#实现获取文件夹大小的源代码

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  8. python在类中使用__slot__属性

    在类中定义__slot__属性来限制实例的属性字段,在创建大量对象的场合可以减少内存占用. 创建大量对象是内存占用对比: 类中不使用__slot__ class MySlot:def __init__ ...

  9. Kettle日志级别

    Kettle的日志级别LogLevel分为以下几个: Nothing 没有日志 不显示任何输出 Error 错误日志 仅仅显示错误信息 Minimal 最小日志 使用最小的日志 Basic 基本日志 ...

  10. vue中怎么使用vuex

    做一个简单的vuex如何使用的介绍: 先安装: npm i vuex --save-dev 新建一个store文件夹, 在store文件夹中建一个index.js文件,在该文件中:         i ...