zoukankan      html  css  js  c++  java
  • Oracle数据库零散知识02

    15,函数的创建,要求必须有返回值,必须在语句中调用,需要多个返回值时,使用out参数类型,在user_procedures表中查询属性,在user_source表中查询源代码,创建示例:

    CREATE OR REPLACE FUNCTION my_function_01--创建函数
    (v_01 IN NUMBER)--参数列表
    RETURN NUMBER--返回类型
    is--标识
    res NUMBER;--变量的声明
    BEGIN--函数主体
      res := v_01;
      RETURN res;--返回值
      END;
    

      

    16,异常,分为预定义异常(有名字,有编号),非预定义异常(有编号无名字),自定义异常(无名字无编号),两个常用异常,no_data_found,too_many_rows声明及处理自定义异常示例:

    DECLARE
      my_exp EXCEPTION;--声明一个异常
      PRAGMA EXCEPTION_INIT (my_exp,-20113);--关联异常编号 20000-20999;
      BEGIN
        RAISE my_exp;--抛异常使用raise
        EXCEPTION--语句中异常处理部分
          WHEN my_exp THEN--获取异常 when .. then ..// when others then..
            dbms_output.put_line('my exception');
            END;
    

      

    17,pl/sql中可以直接使用dml,dql语言,使用ddl语言时需要使用 execute immediate 关键字;示例:

    DECLARE
    v_str VARCHAR2(30);
    BEGIN
      v_str := 'create table stu(id number)';--dml语句
      EXECUTE IMMEDIATE v_str;--使用关键字
      END;
    

      

    18,游标分静态游标与ref游标,静态的分为显式游标和隐式游标,显式游标使用需要四个步骤,单行循环提取示例:

      DECLARE
      CURSOR cursor_01--声明一个无参数游标
      IS
      SELECT * FROM student;
      v_stu student%ROWTYPE;--单行接收
      BEGIN
        OPEN cursor_01;--打开游标
        LOOP
        FETCH cursor_01 INTO v_stu;--从游标中提取
        EXIT cursor_01%NOTFOUND;
        .....
        CLOSE cursor_01;--关闭游标
        END;
    

      

    使用多行循环提取到表提高效率示例:

    DECLARE
      CURSOR cursor_01--声明一个无参数游标
      IS
      SELECT * FROM student;
    TYPE tab IS TABLE OF student%ROWTYPE;
    v_stu tab;--表接收
      BEGIN
        OPEN cursor_01;--打开游标
        LOOP
        FETCH cursor_01 BULK COLLECT INTO v_stu LIMIT 2;--从游标中提取,每次提取两行
        dbms_output.put_line(v_stu(1).sno);--取两行其中一行数据
        EXIT cursor_01%NOTFOUND;
        .....
        CLOSE cursor_01;--关闭游标
        END;
    

      

    使用cursor for loop 简化查询:

    DECLARE
      CURSOR cursor_01--声明一个无参数游标
      IS
      SELECT * FROM student;
      BEGIN
        OPEN cursor_01;--打开游标
       FOR cur IN cursor_01 --cursor for loop
         LOOP
        EXIT cursor_01%NOTFOUND;
        dbms_output.put_line(cur.sno);
        .....
        CLOSE cursor_01;--关闭游标
        END;
    

      

    带参数游标主要是为了限制查询条件:

    DECLARE
    CURSOR cursor_01 (sn VARCHAR2(4))
    IS
    SELECT * FROM student WHERE sname LIKE '%'||sn||'%';--限制查询条件
    

      

    隐式游标,默认名为sql,select into或dml操作会产生隐式游标,其属性值是最新执行的sql语句,对数据有影响sql%found则为true。

    19,复合类型的变量声明,记录类型示例:

    DECLARE 
    TYPE re IS RECORD--记录类型
    (
    v_id student.sno%TYPE,--单字段类型
    v_sname VARCHAR2(10)
    );
    BEGIN
      SELECT sno , sname INTO re FROM Student;
      ......
    

      

    直接单行表类型声明:

    DECLARE 
      v_stu student%ROWTYPE;--单行类型
    

      

    索引表示例:

    DECLARE
      TYPE tab IS TABLE OF Student%ROWTYPE--索引表类型
      INDEX BY BINARY_INTEGER;
      t_stu tab;
    

      

    Varray变长数组:

    DECLARE
      TYPE arr IS VARRAY(100) OF VARCHAR2(20);--变长数组,100大小
      v_arr arr := arr('1','2');--初始两个元素
    

      

    20,视图的创建示例:

    CREATE OR REPLACE VIEW view_name 
      AS
      SELECT * FROM Student;
    

      

  • 相关阅读:
    luogu P5473 [NOI2019]I 君的探险 交互 随机 二分 分治 整体二分
    218. The Skyline Problem
    315. Count of Smaller Numbers After Self
    493. Reverse Pairs
    307. Range Sum Query
    1409. Queries on a Permutation With Key
    如果redis没有设置expire,他是否默认永不过期?
    同步调用和异步调用
    缓存穿透、缓存击穿、缓存雪崩概念及解决方案
    Python实现发送邮件---转载至https://www.cnblogs.com/liuqingzheng/articles/10072695.html
  • 原文地址:https://www.cnblogs.com/whytohow/p/4913573.html
Copyright © 2011-2022 走看看