• oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)


    LOB类型

    ORACLE提供了LOB (Large OBject)类型。用于存储大的数据对象的类型。ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型。

    • NCLOB

      存储大的NCHAR字符数据类型。每一个变量存储大字符对象的位置,该位置指到大字符数据块。大字符对象的大小<=4GB。

    • CLOB(Book)

      存储大的字符数据类型。

      每一个变量存储大字符对象的位置。该位置指到大字符数据块。大字符对象的大小<=4GB。

    • BLOB(Photo)

      存储大的二进制数据类型。

      变量存储大的二进制对象的位置。

      大二进制对象的大小<=4GB。

    • BFILE (Movie)

      存放大的二进制数据对象。这些数据文件不放在数据库里,而是放在操作系统的某个文件夹里,数据库的表里仅仅存放文件的文件夹。

    BIND 变量

     绑定变量是在主机环境中定义的变量。在PL/SQL 程序中能够使用绑定变量作为他们将要使用的其他变量。为了在PL/SQL 环境中声明绑定变量,使用命令VARIABLE。比如:

    VARIABLE return_code NUMBER
    VARIABLE return_msg VARCHAR2(20)

    能够通过SQL*Plus命令中的PRINT 显示绑定变量的值。比如:

    PRINT return_code
    PRINT return_msg

    PL/SQL 表(TABLE)

      定义记录表(或索引表)数据类型。

    它与记录类型类似。但它是对记录类型的扩展。它能够处理多行记录,类似于高级中的二维数组,使得能够在PL/SQL中模仿数据库中的表。


      定义记录表类型的语法例如以下:

    TYPE table_name IS TABLE OF element_type [NOT NULL]
    INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2]

    EXISTS(n)假设集合的第n个成员存在,则返回true
    COUNT返回已经分配了存储空间即赋值了的成员数量
    FIRST:返回成员的最低下标值
    LAST:返回成员的最高下标值
    PRIOR(n)返回下标为n的成员的前一个成员的下标。

    假设没有则返回NULL
    NEXT(N)返回下标为n的成员的后一个成员的下标。假设没有则返回NULL
    TRIM:删除末尾一个成员
    TRIM(n) :删除末尾n个成员
    DELETE:删除全部成员
    DELETE(n) :删除第n个成员
    DELETE(m, n) :删除从n到m的成员
    EXTEND:加入一个null成员
    EXTEND(n):加入n个null成员
    EXTEND(n,i):加入n个成员。其值与第i个成员同样
    LIMIT返回在varray类型变量中出现的最高下标值

    • 第一个样例
      声明一个表类型,一个数字进行循环,第一个循环通过四次循环,往表类型数组中插入4条记录,第二个循环通过循环整个表数组,输出我们所须要的数据,
    DECLARE
      TYPE dept_table_type IS TABLE OF
      dept%ROWTYPE INDEX BY BINARY_INTEGER;
      my_dname_table dept_table_type;
      v_count number(2) :=4;
    BEGIN
      FOR int IN 1 .. v_count LOOP
        SELECT * INTO my_dname_table(int) FROM dept WHERE deptno=int*10;
      END LOOP;
      FOR int IN my_dname_table.FIRST .. my_dname_table.LAST LOOP
      DBMS_OUTPUT.PUT_LINE('Department number: '||my_dname_table(int).loc);
      DBMS_OUTPUT.PUT_LINE('Department name: '|| my_dname_table(int).dname);
      END LOOP;
    END;
    • 第二个样例
      写一个一维数组,赋值。并循环输出
    declare 
      --定义记录表数据类型
      TYPE reg_table_type IS TABLE OF varchar2(25)
      INDEX BY BINARY_INTEGER;
      --声明记录表数据类型的变量
      v_reg_table reg_table_type;
      i int :=1;
    begin
      v_reg_table(1):='李岩昊1';
       v_reg_table(2):='李岩昊2';
        v_reg_table(3):='李岩昊3';
         v_reg_table(4):='李岩昊4';
          v_reg_table(5):='李岩昊5';
          FOR INT IN  i .. v_reg_table.LAST LOOP
    
            DBMS_OUTPUT.put_line('我第'||i||'个名字'||v_reg_table(i));
              i:=i+1;
            END LOOP;
    end;
    • 第三个样例:按二维数组使用记录表
    declare 
    --定义记录表数据类型
       TYPE employee_table_type IS TABLE OF t_employee%ROWTYPE
       INDEX BY  BINARY_INTEGER;
       --声明记录表数据类型的变量
       my_employee_table employee_table_type;
       i int :=1;
    begin
      SELECT fnumber,fname,fage,fsalary
      INTO   my_employee_table(1).fnumber,my_employee_table(1).fname,my_employee_table(1).fage,my_employee_table(1).fsalary
      FROM   t_employee
      WHERE t_employee.fnumber='DEV002';
    
      SELECT fnumber,fname,fage,fsalary
      INTO   my_employee_table(2).fnumber, my_employee_table(2).fname, my_employee_table(2).fage, my_employee_table(2).fsalary
      FROM t_employee
      WHERE t_employee.fnumber='SALES001';
    
      FOR int IN i .. 2 LOOP
    
       Dbms_Output.put_line('雇员     DEV002:'||my_employee_table(i).fname);
       i:=i+1; 
     END LOOP;
    
    end;
  • 相关阅读:
    洛谷4451 整数的lqp拆分(生成函数)
    CF1137C Museums Tour(Tarjan,强连通分量)
    CF932E Team Work(第二类斯特林数)
    CF1131F Asya And Kittens(Kruskal重构树,启发式合并)
    CF1131E String Multiplication(???)
    CF438E The Child and Binary Tree(生成函数,NTT)
    [HAOI2015]按位或(min-max容斥,FWT,FMT)
    【noi 2.6_9281】技能树(DP)
    【noi 2.6_9280】&【bzoj 1089】严格n元树(DP+高精度+重载运算符)
    【noi 2.6_9277】Logs Stacking堆木头(DP)
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7216132.html
Copyright © 2020-2023  润新知