欢迎投稿

今日深度:

oracle学习之路(四),oracle学习之路

oracle学习之路(四),oracle学习之路


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;

www.htsjk.Com true http://www.htsjk.com/shujukunews/8722.html NewsArticle oracle学习之路(四),oracle学习之路 LOB类型 ORACLE提供了LOB (Large OBject)类型,用于存储大的数据对象的类型。ORACLE目前主要支持BFILE, BLOB, CLOB 及 NCLOB 类型。 NCLOB 存储大的NCHAR字符数据类...
评论暂时关闭