`
123003473
  • 浏览: 1042301 次
  • 性别: 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行。
分享到:
评论

相关推荐

    Joomla! 1.5 Development Cookbook.pdf

    Converting an array to an object 270 Getting a column from a multidimensional array 272 Getting a value from an array 273 Casting all elements of an array to integers 274 Sorting an array of ...

    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 ...

    PL0编译程序源程序

    table: array[0..txmax] of record name: alfa; case kind: object of constant: (val: integer); variable,procedure: (level,adr: integer) end; (*符号表*) procedure error(n: integer); (*报错程序*) begin ...

    Json-lib 是一个 Java 类库

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

    JSON 数据格式详解

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

    实例详解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 ...

    编译原理中的PL0编译程序

    (*length of identifier table*) nmax = 14; (*max. no. of digits in numbers*) al = 10; (*length of identifiers*) amax = 2047; (*maximum address*) levmax = 3; (*maximum depth of block nesting*) ...

    JSON数据格式

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

    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...

    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. ------------------- ...

    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. ------------------- ...

    EhLib 6.3 Build 6.3.176 Russian version. Full source included.

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

    rx第三方控件

    work with the TApplication object properties and events at design time. TRxFolderMonitor component provides notification if any changes matching the filter conditions occur in the specified directory...

    EhLib5.0.13 最新的ehlib源码

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

    Delphi7.1 Update

    even when all of the details are deleted if the detail table was previously cloned (Quality Central 5646). * In some cases, records may disappear from a nested TClientDataset after performing edits, ...

Global site tag (gtag.js) - Google Analytics