• Oracle简单学习


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

    devices(id number, name varchar2, age number)

    image

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

    image

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

    image

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

    首先是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;

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

    image

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

    输入dev_id为3,

    结果rs为:

    image

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

    image


  • 相关阅读:
    备忘录模式(java)
    06
    观察者模式(java)
    迭代器模式(c++)
    06
    07
    2021.11.21(迭代器模式c++)
    2021.11.24(状态模式java)
    2021.11.22(hive安装)
    2021.11.23(MYSQL安装)
  • 原文地址:https://www.cnblogs.com/xumBlog/p/11830843.html
Copyright © 2020-2023  润新知