Oracle简单学习

最近一段时间重温了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输出是什么:

原文地址:https://www.cnblogs.com/xumBlog/p/11830843.html

时间: 2024-08-06 12:50:59

Oracle简单学习的相关文章

Oracle简单学习笔记

创建用户 1 CREATE USER username identified by password;//这是最简单的用户创建SQL语句. 2 CREATE USER username identified by password default tablespace users temporary tablespace temp;//增加指定表空间的SQL语句. 分配用户权限 1 grant 权限/角色 to 用户;//把权限或角色的权限 分配给 用户. 2 revoke 权限/角色 from

oracle 触发器 学习笔记

触发器 是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们. 功能: 1. 允许/限制对表的修改 2. 自动生成派生列,比如自增字段 3. 强制数据一致性 4. 提供审计和日志记录 5. 防止无效的事务处理 6. 启用复杂的业务逻辑 开始 create trigger biufer_employees_department_id before insert or update of department_id on employees referencing old

高内聚低耦合简单学习

起因:模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单, 两个定性的度量标准――耦合性和内聚性. 耦合性也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越 紧密,其耦合性就越强,模块的独立性则越差.模块间耦合高低取决于模块间接口的复杂性.调用的方 式及传递的信息.   耦合性分类(低――高): 无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合;内容耦合; 1 无直接耦合: 2 数据耦合: 指两个模块之间有调用关系,传递的是简单的数

Oracle基础学习1--Oracle安装

安装过程较简单,按着步骤走即可.这里需要提醒如果要使用PL/SQL来操作Oracle,那么最好安装32位Oracle程序.原因是网上说PL/SQL只对32位Oracle进行支持,如果用64为Oracle+PL/SQL协同工作,会出现许多问题,例如无法加载oci.dll等.自己当然也亲自经历过,64位的Oracle单独使用很好,但相应的PL/SQL Developer却较难配置. 安装过程需要注意两个地方: ?  全局数据库名: ?  系统用户的密码(一般默认即可) 如何验证安装成功?按着自己的经

Oracle 存储过程学习

Oracle 存储过程学习 目录 Oracle 存储过程 1 Oracle存储过程基础知识 1 Oracle存储过程的基本语法 2 关于Oracle存储过程的若干问题备忘 4 1. 在Oracle中,数据表别名不能加as. 4 2. 在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了. 5 3. 在利用select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常. 5 4.

Oracle基础学习5-- Oracle权限之”角色”

任何与权限相关的东西都少不了"角色"的概念,Java如此,.Net如此,Oracle当然也不例外. 角色其实就是权限的集合,将多个权限打包到一个角色中,这样每个角色有特定的权限.当需要给某个对象赋予某种权限时,就找到具有相应权限的角色,然后将它加到这个集合当中.下面就简单看看Oracle中角色的运用. 上篇文章讲到,为了给多用户授予各种权限,我们用到了"权限传递"来代替给用户们一个个授权,简化了授权过程.但这种方式较之用"角色"方式授权还是有很多

$.fn.extend简单学习

(function($){ /** 1. $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法, 那么后面你的每一个jquery实例都可以引用这个方法了.  那么你可以这样子:$("#div").abc();  2.   jQuery为开发插件提拱了两个方法,分别是:  jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法.→

varnish简单学习

操作系统:redhat5.5 前端服务器:varnish cache 2.1.5 监听端口8080 后端服务器:tengine 1.4.6 监听端口80 接着,建立varnish用户以及用户组,并且创建Varnish缓存目录和日志目录:[[email protected] ~]#useradd  -s /sbin/nologin varnish[[email protected] ~]#mkdir /data/varnish/cache[[email protected] ~]#mkdir /d

Oracle GoldenGate学习之--GoldenGate的监控

Oracle GoldenGate学习之--GoldenGate的监控 1.使用GGSCI命令监控 (1)进入GoldenGate安装目录,运行GGSCI,然后使用info all查看整体的运行状况 GGSCI (aix212) 1> info all Program     Status      Group       Lag at Chkpt  Time Since Chkpt MANAGER     RUNNING EXTRACT     RUNNING     EORA_1