`
123003473
  • 浏览: 1073455 次
  • 性别: 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)。 - **值的有序...

    C# 传入自定义列表List 到Oracle存储过程

    CREATE OR REPLACE TYPE MY_TYPE AS OBJECT ( ID NUMBER, NAME VARCHAR2(100) ); CREATE OR REPLACE TYPE MY_TYPE_TABLE AS TABLE OF MY_TYPE; CREATE OR REPLACE PROCEDURE my_procedure (p_list IN MY_...

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

    SQL&PL SQL FAQ第二版

    怎么使用object与record类型返回表类型数据 在 PL/SQL 中,可以使用对象和记录类型来返回表类型数据。例如,定义一个包含多个字段的对象类型,然后将其用作表的元素类型。 ```plsql CREATE OR REPLACE TYPE ...

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

Global site tag (gtag.js) - Google Analytics