`
123003473
  • 浏览: 1059994 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

table array object record

 
阅读更多
前段时间我恰好有关于这些的学习笔记,贴出来大家指点一下:

=====================================================
record:该集合可以存储一对多的标量属性。
pl/sql表:是pl/sql代码中的“表”,只存在应用运行期间(内存里),类似“数组”,稀疏的,大小可以动态增长,可以有负下标,但不能存储在数据库表中。
varray:与pl/sql区别是可以在表列中存储,是密集的,不能删除单独记录,不能有负下标,固定大小的集合。
nested table:可以在表列中存储,稀疏的,可以删除单独记录,不能有负下标,大小可变。

1、记录:

SQL> declare
  2 type emp_rec_t is record(
  3 no number,
  4 name varchar2(10)
  5 );
  6 emp1 emp_rec_t;
  7 emp2 emp_rec_t;
  8 begin
  9 emp1.no:=1;
 10 emp1.name:='chennan';
 11 emp2:=emp1; 同一记录类型,可以直接赋值
 12 dbms_output.put_line('emp2.no='||emp2.no);
 13 dbms_output.put_line('emp2.name='||emp2.name);
 14 end;
 15 /
emp2.no=1
emp2.name=chennan

PL/SQL 过程已成功完成。

SQL>
SQL> declare
  2 type emp_rec_t is record(
  3 no number,
  4 name varchar2(10)
  5 );
  6
  7 type mgr_rec_t is record(
  8 no number,
  9 name varchar2(10)
 10 );
 11
 12 emp1 emp_rec_t;
 13 mgr1 mgr_rec_t;
 14
 15 begin
 16 emp1.no:=1;
 17 emp1.name:='chennan';
 18 mgr1:=emp1; -- 尽管字段类型相同,但不是同一记录类型,不能直接赋值
 19 end;
 20 /
mgr1:=emp1; -- 尽管字段类型相同,但不是同一记录类型,不能直接赋值
  *
ERROR 位于第 18 行:
ORA-06550: 第 18 行, 第 7 列:
PLS-00382: 表达式类型错误
ORA-06550: 第 18 行, 第 1 列:
PL/SQL: Statement ignored



2、pl/sql表:

SQL> declare
  2 -- 自定义记录类型
  3 type rec_t is record(
  4 empno number,
  5 ename varchar2(10)
  6 );
  7 -- 数组类型
  8 type varray_t1 is table of varchar(10) index by binary_integer; -- 单字段数组
  9 type varray_t2 is table of rec_t index by binary_integer; -- 自定义多字段数组
 10 type varray_t3 is table of emp%rowtype index by binary_integer; -- 表的行记录数组
 11 -- 数组变量
 12 varray1 varray_t1;
 13 varray2 varray_t2;
 14 varray3 varray_t3;
 15 i integer;
 16 j integer;
 17 begin
 18 i:=0;
 19 for x in (select * from emp where rownum<4) loop
 20 varray1(i):=x.ename;
 21 varray2(i).empno:=x.empno;
 22 varray2(i).ename:=x.ename;
 23 varray3(i):=x;
 24 i:=i+1;
 25 end loop;
 26 dbms_output.put_line('--------------');
 27 for i in 0 .. varray1.count-1 loop
 28 dbms_output.put_line('varray1('||i||')='||varray1(i));
 29 end loop;
 30 dbms_output.put_line('--------------');
 31 for i in 0 .. varray2.count-1 loop
 32 dbms_output.put_line('varray2('||i||').empno='||varray2(i).empno);
 33 dbms_output.put_line('varray2('||i||').ename='||varray2(i).ename);
 34 end loop;
 35 dbms_output.put_line('--------------');
 36 for i in 0 .. varray3.count-1 loop
 37 dbms_output.put_line('varray3('||i||').empno='||varray3(i).empno);
 38 dbms_output.put_line('varray3('||i||').ename='||varray3(i).ename);
 39 dbms_output.put_line('varray3('||i||').job='||varray3(i).job);
 40 -- ......
 41 end loop;
 42 dbms_output.put_line('--------------');
 43 i:=varray3.first;
 44 while i is not null loop
 45 dbms_output.put_line('varray3('||i||').ename='||varray3(i).ename);
 46 i:=varray3.next(i);
 47 end loop;
 48 dbms_output.put_line('--------------');
 49 i:=varray3.first;
 50 j:=varray3.last;
 51 while i<=j loop
 52 dbms_output.put_line('varray3('||i||').ename='||varray3(i).ename);
 53 i:=varray3.next(i);
 54 end loop;
 55 dbms_output.put_line('----- before delete -----');
 56 dbms_output.put_line('varray3 has '||varray3.count||' rows');
 57 varray3.delete(1);
 58 dbms_output.put_line('delete rows(1) then varray3 has '||varray3.count||' rows');
 59 dbms_output.put_line('----- now varray3 :----');
 60 i:=varray3.first;
 61 j:=varray3.last;
 62 while i<=j loop
 63 dbms_output.put_line('varray3('||i||').ename='||varray3(i).ename);
 64 i:=varray3.next(i);
 65 end loop;
 66 varray3.delete;
 67 dbms_output.put_line(' ----- when delete all,now varray3 has '||varray3.count||' rows');
 68 end;
 69 /
--------------
varray1(0)=SMITH
varray1(1)=ALLEN
varray1(2)=WARD
--------------
varray2(0).empno=7369
varray2(0).ename=SMITH
varray2(1).empno=7499
varray2(1).ename=ALLEN
varray2(2).empno=7521
varray2(2).ename=WARD
--------------
varray3(0).empno=7369
varray3(0).ename=SMITH
varray3(0).job=CLERK
varray3(1).empno=7499
varray3(1).ename=ALLEN
varray3(1).job=SALESMAN
varray3(2).empno=7521
varray3(2).ename=WARD
varray3(2).job=SALESMAN
--------------
varray3(0).ename=SMITH
varray3(1).ename=ALLEN
varray3(2).ename=WARD
--------------
varray3(0).ename=SMITH
varray3(1).ename=ALLEN
varray3(2).ename=WARD
----- before delete -----
varray3 has 3 rows
delete rows(1) then varray3 has 2 rows
----- now varray3 :----
varray3(0).ename=SMITH
varray3(2).ename=WARD
----- when delete all,now varray3 has 0 rows

PL/SQL 过程已成功完成。

SQL>



3、varrays

SQL> create type emp_type as object(
  2 empno number,
  3 ename varchar2(10)
  4 );
  5 /

类型已创建。

SQL> create type emp_type_list as varray(50) of emp_type;
  2 /

类型已创建。

SQL> create table myemp(
  2 deptno number,
  3 deptname varchar2(10),
  4 manager emp_type,
  5 employees emp_type_list
  6 );

表已创建。

SQL> insert into myemp(deptno,deptname,manager,employees) values(
  2 10,'ACCOUNTING',emp_type(7782,'CLARK'),emp_type_list(emp_type(7934,'MILLER'),emp_type(1223,'TEST')));

已创建 1 行。

SQL> insert into myemp(deptno,deptname,manager,employees) values(
  2 20,'RESEARCH',emp_type(7566,'JONES'),emp_type_list(emp_type(7902,'FORD'),emp_type(7788,'SCOTT'),emp_type(4567,'OTHER')));

已创建 1 行。

SQL> col employees for a100
SQL> col manager for a30
SQL> select * from myemp;

  DEPTNO DEPTNAME MANAGER(EMPNO, ENAME) EMPLOYEES(EMPNO, ENAME)
---------- ---------- ------------------------------ ----------------------------------------------------------------------------------------
  10 ACCOUNTING EMP_TYPE(7782, 'CLARK') EMP_TYPE_LIST(EMP_TYPE(7934, 'MILLER'), EMP_TYPE(1223, 'TEST'))
  20 RESEARCH EMP_TYPE(7566, 'JONES') EMP_TYPE_LIST(EMP_TYPE(7902, 'FORD'), EMP_TYPE(7788, 'SCOTT'), EMP_TYPE(4567, 'OTHER'))

已选择2行。
分享到:
评论

相关推荐

    json C语言 接口函数

    这种结构在不同语言中有着不同的叫法,比如对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list)或关联数组(associative array)。 - **值的有序...

    DbfDotNet_version_1.0_Source

    Dbf.Net requires a type safe record upfront to create a table. In ADO.Net you provide a string. Dbf.Net ADO.Net Collapse Copy CodeDbfTable&lt;dbfdotnetindividual&gt; mIndividuals; void ...

    jsonchecker

    不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 * 值的有序列表(An ...

    Json-lib 是一个 Java 类库

    不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。 在 Java 语言中,我们可以...

    idea Java 解析json文件并导入mysql数据库

    List&lt;Record&gt; records = mapper.readValue(rootNode.findValuesAsText("array_name"), new TypeReference&lt;List&lt;Record&gt;&gt;() {}); ``` 4. **连接MySQL数据库** 使用JDBC(Java Database Connectivity)可以轻松...

    实例详解JSON数据格式及json格式数据域字符串相互转换

    不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 2. 值

    JSON-Parser:JSON解析器

    “名称/值”对的集合不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。...

    EhLib 9.1.038 for D7-XE-10.2

    It is also possible to consider the form of an array of records. Besides that: It supports a specific environment that allows the use of the DBGridEh component that can display all data without ...

    PHP_ADODB_1.99_CN_HLEP.zip_php ADOdb api

    PHP ADODB(Active Record Object Data Base)是一个强大的数据库抽象层,允许开发人员在多种数据库系统(如MySQL、PostgreSQL、Oracle等)之间进行切换,无需修改大部分代码。PHP ADODB 1.99 版本的API提供了一整套...

    JSON数据格式

    不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 { "name":"smith", ...

    Oracle-data-type.rar_oracle

    Oracle数据库还支持PL/SQL复合类型,如记录(Record)和表类型(Table),以及集合类型,如关联数组(Associative Array)。这些类型使得在数据库中进行复杂的逻辑操作变得更加灵活和高效。 在实际应用中,选择正确...

    Scientific.Computing.with.Python.3.2nd.Ed.epub

    How and when to correctly apply object-oriented programming for scientific computing in Python Handle exceptions, which are an important part of writing reliable and usable code Two aspects of testing...

    计算机常用英语词汇详解

    4. **编程**:涉及编程概念如变量(Variable)、函数(Function)、循环(Loop)、条件语句(Conditional Statement)、数组(Array)、对象(Object)、类(Class)、继承(Inheritance)、封装(Encapsulation)、...

    ehlib_vcl_src_9_3.26

    TABLE OF CONTENTS ----------------- Overview Installation Library Installation Help Demonstration Programs Registering and Prices Other information About author Where to start. ------------------- ...

    EhLib 9.1.024

    TABLE OF CONTENTS ----------------- Overview Installation Library Installation Help Demonstration Programs Registering and Prices Other information About author Where to start. ------------------- ...

    php adodb文件包

    PHP ADODB,全称为“PHP Active Record Object Data Base Abstraction Library”,是一个强大的数据库抽象层,为PHP开发者提供了统一的方式来访问多种不同的数据库系统。这个文件包是PHP ADODB的一个实现,旨在帮助...

    php adodb类

    ADODB(Active Record Database Object)是PHP中一款强大的数据库抽象层,它提供了一套全面的数据库操作接口,支持多种数据库系统,包括MySQL、PostgreSQL、Oracle、SQL Server等。它的存在使得开发者能够在不同的...

    Scientific Computing with Python 3

    How and when to correctly apply object-oriented programming for scientific computing in Python Handle exceptions, which are an important part of writing reliable and usable code Two aspects of testing...

    EhLib 8.0 Build 8.0.023 Pro Edition FullSource for D7-XE8

    TABLE OF CONTENTS ----------------- Overview Installation Library Installation Help Demonstration Programs Registering and Prices Other information About author Where to start. ------------------- ...

Global site tag (gtag.js) - Google Analytics