PLSQLPLSQL中复合数据类型

Posted David Wu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PLSQLPLSQL中复合数据类型相关的知识,希望对你有一定的参考价值。

1,常见的操作数据库的技术有那些

   jdbc     使用java 访问数据库的技术
   PLSQL  (procedure  过程化sql) 在数据库内部操作数据的技术
   proc/c++    c 和 c++ 访问数据库的技术
   ODBC      微软提供访问数据库的技术
   OCI          oracle  底层的连接接口 

2,Oracle中的复合数据类型

Oracle中的复合数据类型record,table,cursor

2.1 record类型

2.1.1 语法

           /*定义一个record类型*/
           type record类型名称 is record(
                属性  数据类型,
                属性  数据类型
                ...
           );
           /*使用record类型名称定义一个record变量*/
           record变量名   record类型名称

也可以使用表的字段来定义,

           /*使用表的字段类型定义一个record类型*/
           type record类型名称 is record(
                属性  表名.属性名%type,
                属性  表名.属性名%type
                ...
           );
           /*使用record类型名称定义一个record变量*/
           record变量名   record类型名称

2.1.2 示例

set serveroutput on;
declare
           type  emptype  is  record(
                  id     number,
                  name varchar2(5)
            );
           var_emp   emptype;
begin
           var_emp.id:=1;
           var_emp.name:=‘jame‘;
           dbms_output.put_line(var_emp.id);
end;
/

2.2 table类型

2.2.1 语法

/*定义一个table类型*/
type    table类型名  is  table  of  元素类型名    index  by  binary_integer;
/*定义一个table变量*/
变量名      table类型名;

访问数据的方式,

table变量(下标):=值;

2.2.2 示例

      declare
              type  numstype  is table of  number   index by binary_integer;
              var_nums   numstype;               
      begin
              var_nums(0):=9;
              var_nums(1):=5;
              var_nums(2):=2;
              var_nums(3):=7;
              var_nums(4):=0;
              dbms_output.put_line(var_nums(3));/*打印下标为3的元素*/
      end;

table中的数据也可以使用迭代的思想来操作

     下标不连续时 遍历table类型的变量      
      迭代思想:
      变量名.first()   获取第一个元素对应的下标 (元素对应的最小下标)
      变量名.next(n)  根据一个元素的下标n  得到下一个元素对应的下标
      变量名.last()     获取最后一个元素对应的下标  

例如:

   set serveroutput on;
       declare
              type  numstype  is table of  number   index by binary_integer;
              var_nums   numstype; 
              var_index    binary_integer:=0;              
      begin
              var_nums(0):=9;
              var_nums(1):=5;
              var_nums(-12):=2;
              var_nums(3):=7;
              var_nums(4):=0;
              -- var_nums.count();
               var_index :=  var_nums.first();
              loop
                      dbms_output.put_line(var_nums(var_index));
                      var_index:=var_nums.next(var_index);
                      if var_index =  var_nums.last()  then
                             dbms_output.put_line(var_nums(var_index));
                             exit; 
                      end if;  
              end loop;
       end;
     /

 

2.3 cursor类型

2.3.1 语法

/*声明游标*/
 cursor   游标名   is  select语句;
/*打开游标*/
open   游标名;
/*提取数据,将结果存储到变量中,一般都是record类型*/
fetch   游标名   into  变量;
/*关闭游标*/
close 游标名

2.3.2 示例

         declare 
                /*使用s_emp创建一个游标变量*/
                cursor  empcursor  is  select  id,first_name name,salary from s_emp;
                /*创建一个record类型*/
                type   emptype is  record(
                       id    s_emp.id%type,
                       name s_emp.first_name%type,
                       salary  s_emp.salary%type
                );
                /*创建一个record变量*/
                var_emp   emptype;
         begin
                /*打开游标*/
                open   empcursor;

                /*将游标的第一条值存储到var_emp中*/
                fetch   empcursor  into  var_emp;
                dbms_output.put_line(var_emp.id||:||var_emp.name||:||var_emp.salary);

                /*将游标的第一条值存储到var_emp中*/
                fetch   empcursor  into  var_emp;
                dbms_output.put_line(var_emp.id||:||var_emp.name||:||var_emp.salary); 

                /*关闭游标*/
                close   empcursor;  
         end;
         /

 

以上是关于PLSQLPLSQL中复合数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Java中具有不同数据类型的复合减法[重复]

Android 片段与复合控件

Postgresql:复合类型并选择进入

Postgres 复合类型 drop cascade 仅删除依赖列

PL/SQL复合变量

hive复合数据类型array