- 浏览: 224970 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (244)
- java (23)
- java多线程 (7)
- 综合 (1)
- oracle10g (24)
- div+css (1)
- Flex (27)
- java Nio (1)
- java设计模式 (8)
- struts2 (10)
- spring3.0 (5)
- SSH (9)
- dwr (5)
- hibernate3.6 (17)
- dom4j (1)
- sql优化 (5)
- Quartz任务调度框架 (1)
- AOP (3)
- JavaScript (18)
- jquery (3)
- JSF (9)
- ruby (1)
- 正则表达式 (1)
- 明日准备 (2)
- eclipse (3)
- gvim (1)
- CMS (1)
- linux (6)
- 杂 (4)
- java 设计模式 (1)
- MySql (10)
- JBPM (4)
- JSP技术 (1)
- Mybatis And Ibatis (2)
- 经验之谈 (10)
- WebService (1)
- java分布式(高性能,高可用,可伸缩) (0)
- springMvc (2)
- redis (0)
- ant (1)
- Nutz (6)
- 配置管理 (0)
- css+div (1)
- eChars (1)
- angularJs (1)
- D3 (3)
- Scala (1)
最新评论
-
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
有个小失误,144和147行多了两个花括号
js面向对象2--js中工厂模式的演化(重要,详细) -
Cobain_LI:
学习了,之前一直都没注意到有这样的问题
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
YTT1121:
有网络拓扑发现的源代码么,或者您会编写么?可以有偿求购,搞科研 ...
flex 之twaver1--简单网络拓扑实现
知识点:
1,ORACLE 在 PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---
记录和表.
记录类型类似于C语言中的结构数据类型,它把逻辑相关的、分离的、基本数据类型的变量组成一个整体存储起来,它必须包括至少一个标量型或RECORD 数据类型的成员,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。
定义记录类型语法如下:
实例1:
实例2:
输出如下:
SMITH
CLERK
800
实例3:
注意:一个记录类型的变量只能保存从数据库中查询出的一行记录,若查询出了多行记录,就会出现错误。否则会报错:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 line 11
第二种复合类型--数组
数据是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY。
定义VARRY数据类型语法如下:
varray_name是VARRAY数据类型的名称,size是下整数,表示可容纳的成员的最大数量,每个成员的数据类型是element_type。默认成员可以取空值,否则需要使用NOT NULL加以限制。对于VARRAY数据类型来说,必须经过三个步骤,分别是:定义、声明、初始化。
实例1:
实例2:
--数组 varray实例
declare
type type_myVarray is varray(3) of Varchar2(30);
v_myvarrayType type_myVarray;
begin
--第一种赋值方法:构造函数赋值
v_myvarrayType := type_myVarray('男人','女人','不男不女');
dbms_output.put_line(v_myvarrayType(1));
dbms_output.put_line(v_myvarrayType(2));
dbms_output.put_line(v_myvarrayType(3));
--第二种赋值方法:一个一个的赋值
select e.ename,e.job,to_char(e.sal) into v_myvarrayType(1),v_myvarrayType(2),v_myvarrayType(3) from scott.emp e where empno = 7369;
--这种方式不行:会报错:---PLS-00642: 在 SQL 语句中不允许使用本地收集类型(这种赋值方式只适应与record类型的变量)
--select e.ename,e.job,to_char(e.sal) into v_myvarrayType from scott.emp e where empno = 7369;
dbms_output.put_line(v_myvarrayType(1));
dbms_output.put_line(v_myvarrayType(2));
dbms_output.put_line(v_myvarrayType(3));
end;
第三种类型:%type
定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。
使用%TYPE特性的优点在于:
所引用的数据库列的数据类型可以不必知道;
所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL序。
实例:
第四种类型:%rowtype
PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。 使用%ROWTYPE特性的优点在于:
所引用的数据库中列的个数和数据类型可以不必知道;
所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。
实例:
待续**************************************************************
第五种:更高级的数据类型psql表类型;
在前面我们已经讲解了varray,record类型,可以看出他们都是一维的。下面我们要讲解的是综合上面两种类型的数据类型plsql 表,该表示二维的。可以囊括上面的两种类型。
定义记录表(或索引表)数据类型。它与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,类似于高级中的二维数组,使得可以在PL/SQL中模仿数据库中的表。
1,ORACLE 在 PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---
记录和表.
记录类型类似于C语言中的结构数据类型,它把逻辑相关的、分离的、基本数据类型的变量组成一个整体存储起来,它必须包括至少一个标量型或RECORD 数据类型的成员,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。在使用记录数据类型变量时,需要先在声明部分先定义记录的组成、记录的变量,然后在执行部分引用该记录变量本身或其中的成员。
定义记录类型语法如下:
TYPE record_name IS RECORD( v1 data_type1 [NOT NULL] [:= default_value ], v2 data_type2 [NOT NULL] [:= default_value ], ...... [color=red]//注意末尾不能带逗号[/color] vn data_typen [NOT NULL] [:= default_value ] );
实例1:
declare type test_rec is record( name varchar2(30) not null := '胡勇', info varchar2(100) --该处末尾不能添加逗号 ); rec_book test_rec; begin rec_book.name := '陈超阳'; rec_book.info := '中华人民共和国'; dbms_output.put_line(rec_book.name || ',' || rec_book.info); end;
实例2:
declare --定义与hr.employees表中的这几个列相同的记录数据类型 type record_type_emp is record( v_ename emp.ename%type, v_job emp.job%type, v_sal emp.sal%type ); --声明一个该记录数据类型的记录变量 v_emp_record record_type_emp; begin --注意查询的类型应该与复合变量成员的顺序一致 select ename,job,sal into v_emp_record from emp where empno = 7369; dbms_output.put_line(v_emp_record.v_ename); dbms_output.put_line(v_emp_record.v_job); dbms_output.put_line(v_emp_record.v_sal); end;
输出如下:
SMITH
CLERK
800
实例3:
declare type type_mytype is record( ename scott.emp.ename%type, job scott.emp.job%type, sal scott.emp.sal%type ); v_mytype type_mytype; begin select e.ename,e.job,e.sal into v_mytype from scott.emp e where empno = '7499'; dbms_output.put_line(v_mytype.ename); end;
注意:一个记录类型的变量只能保存从数据库中查询出的一行记录,若查询出了多行记录,就会出现错误。否则会报错:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 line 11
第二种复合类型--数组
数据是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY。
定义VARRY数据类型语法如下:
TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];
varray_name是VARRAY数据类型的名称,size是下整数,表示可容纳的成员的最大数量,每个成员的数据类型是element_type。默认成员可以取空值,否则需要使用NOT NULL加以限制。对于VARRAY数据类型来说,必须经过三个步骤,分别是:定义、声明、初始化。
实例1:
--定义数组类型 declare --定义一个最多保存5个varchar(25)数据类型成员的varray数据类型 type reg_varray_type is varray(5) of varchar(25); --声明一个该varray数据类型的变量 v_reg_varray reg_varray_type; begin --用构造函数赋予初值(注意赋值方式--构造函数) [color=red] --访问数组是从下标1开始的(不是0)[/color] v_reg_varray := reg_varray_type('中国','美国','英国','日本','河南'); dbms_output.put_line(v_reg_varray(1)); dbms_output.put_line(v_reg_varray(2)); dbms_output.put_line(v_reg_varray(3)); dbms_output.put_line(v_reg_varray(4)); dbms_output.put_line(v_reg_varray(5)); end;
实例2:
--数组 varray实例
declare
type type_myVarray is varray(3) of Varchar2(30);
v_myvarrayType type_myVarray;
begin
--第一种赋值方法:构造函数赋值
v_myvarrayType := type_myVarray('男人','女人','不男不女');
dbms_output.put_line(v_myvarrayType(1));
dbms_output.put_line(v_myvarrayType(2));
dbms_output.put_line(v_myvarrayType(3));
--第二种赋值方法:一个一个的赋值
select e.ename,e.job,to_char(e.sal) into v_myvarrayType(1),v_myvarrayType(2),v_myvarrayType(3) from scott.emp e where empno = 7369;
--这种方式不行:会报错:---PLS-00642: 在 SQL 语句中不允许使用本地收集类型(这种赋值方式只适应与record类型的变量)
--select e.ename,e.job,to_char(e.sal) into v_myvarrayType from scott.emp e where empno = 7369;
dbms_output.put_line(v_myvarrayType(1));
dbms_output.put_line(v_myvarrayType(2));
dbms_output.put_line(v_myvarrayType(3));
end;
第三种类型:%type
定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。
使用%TYPE特性的优点在于:
所引用的数据库列的数据类型可以不必知道;
所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL序。
实例:
DECLARE -- 用%TYPE 类型定义与表相配的字段 TYPE T_Record IS RECORD( T_no emp.empno%TYPE, T_name emp.ename%TYPE, T_sal emp.sal%TYPE ); -- 声明接收数据的变量 v_emp T_Record; BEGIN SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788; DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_emp.t_no)||' '||v_emp.t_name||' ' || TO_CHAR(v_emp.t_sal)); end;
第四种类型:%rowtype
PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。 使用%ROWTYPE特性的优点在于:
所引用的数据库中列的个数和数据类型可以不必知道;
所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。
实例:
declare v_empno emp.empno%type := &no; rec emp%rowtype; begin select * into rec from emp where empno = v_empno; dbms_output.put_line(rec.ename); dbms_output.put_line(rec.job); dbms_output.put_line(rec.sal); dbms_output.put_line(rec.deptno); end;
待续**************************************************************
第五种:更高级的数据类型psql表类型;
在前面我们已经讲解了varray,record类型,可以看出他们都是一维的。下面我们要讲解的是综合上面两种类型的数据类型plsql 表,该表示二维的。可以囊括上面的两种类型。
定义记录表(或索引表)数据类型。它与记录类型相似,但它是对记录类型的扩展。它可以处理多行记录,类似于高级中的二维数组,使得可以在PL/SQL中模仿数据库中的表。
发表评论
-
oracle 取日期字段的年月日。
2015-06-01 20:19 2040-- Create table create table O ... -
oracle查询一个表的所有分区的名字及所在的表空间
2015-04-04 13:03 1631从USER_TAB_PARTITIONS这个数据库字典表中查询 ... -
oracle表分区详解(转载)
2015-04-04 10:40 540特别注明:该博文转自:http://tianzt.blog.5 ... -
oracle执行计划详解
2015-03-29 09:53 504一.相关的概念 Rowid ... -
sql分组可以按照多个字段分组
2014-12-03 23:38 1055--创建学生表 create table student(s ... -
Oracle二:insert delete update returning into句式
2014-12-01 23:02 1052功能:插入,删除,更新返回操作的记录字段,赋值到变量。 注意: ... -
oracle一:oracle创建表空间,创建用户,分配权限
2014-12-01 22:10 626--第一步:用sql developer或sql plus的s ... -
Hibernate 调用返回值的存储过程
2014-08-04 02:20 2817注:原创作品,转载请注明出处。 曾一度认为orac ... -
oracle创建用户,创建表空间,分配权限。
2014-08-03 19:15 666注:原创作品,转载请注明出处。 --1.首先用scott( ... -
oralce 游标
2014-01-20 16:32 4641,一般游标、参数游标。 declare dep ... -
plsql 表达式
2014-01-01 12:33 665第一:boolean赋值 实例: [color=orange] ... -
oracle10g 系统自带函数-subStr,sys_connect_by_path
2013-12-31 15:08 8061,subStr subSrt是截取字符串函数,下面是详 ... -
oracle 视图(view)
2013-12-29 19:37 6351,视图分为两种 第一 ... -
处理scott用户没有创建视图的权限
2013-12-29 19:06 782通过sys账户给scott账户授权: grant creat ... -
insert into/update/delete returning into语法
2013-12-29 18:47 1390insert into/update/delete ... -
oracle rownum 详解 rowid
2013-12-29 18:23 7361,针对select * from scott.d ... -
plsql点滴
2013-12-29 18:14 5101,oracle对关键字大小不区分,对内容大小区分。 2,PL ... -
plsql实战之综合应用
2013-12-25 13:29 500create or replace package pack_ ... -
plsql-集合-关联数组(下标为数字、字符串)
2013-10-10 11:40 1120--*******集合1--关联数组 ... -
oralce plsql 游标双循环实现 一个表中id的插入
2013-10-10 09:14 592declare tempId1 department ...
相关推荐
TYPE dept_rec IS RECORD ( -- 定义名为dept_rec的记录类型 v_deptno DEPT.deptno%TYPE, v_dname DEPT.dname%TYPE ); dept_rec1 dept_rec; -- 定义一个dept_rec类型的变量dept_rec1 BEGIN SELECT deptno, ...
### Oracle 数组类型 #### VARRAY (Variable Array) `VARRAY` 是一种固定大小的数组结构,它能够存储相同数据类型的多个值。`VARRAY` 的最大长度在定义时就已经确定,之后不能更改。在存储过程中使用 `VARRAY` ...
- **定义**: TABLE 类型类似于数组,可以存储多个相同类型的数据项。 - **声明**: `TYPE type_name IS TABLE OF data_type INDEX BY BINARY_INTEGER;` - **使用**: `IDENTIFIER type_name;` ##### 组合变量 - ...
表类型(TABLE OF)允许存储一组同类型的元素,类似于数组。 - **§2.4.3 使用%ROWTYPE** `%ROWTYPE`关键字可以创建与表或视图的行结构匹配的记录类型变量,方便处理表的数据。 - **§2.4.4 LOB类型** Large ...
1. **定义记录类型**:使用`TYPE`关键字来定义一个新的记录类型,并列出各个字段及其数据类型。 ```sql DECLARE TYPE DepartmentRecordType IS RECORD ( dept_no NUMBER(4) NOT NULL DEFAULT 20, dname ...
my_table_row my_table%ROWTYPE; BEGIN -- 现在my_table_row包含了my_table的所有列 END; ``` `%TYPE`和`%ROWTYPE`是PL/SQL中的两个重要特性,它们主要用于保持数据类型的一致性。 1. `%TYPE`:这个关键字用于...
值得注意的是,与VARRAY和嵌套TABLE类型不同,RECORD类型不能直接在数据库中创建和存储。它们只能作为PL/SQL程序的一部分存在。 下面有两个使用Records的实例: **示例1**: 假设有一个名为CITY的物理表,包含两个...
复合类型如记录(RECORD)和表(TABLE)允许创建自定义数据结构,方便处理复杂的数据集。 - §2.4.3 使用%ROWTYPE %ROWTYPE关键字可以创建一个变量,其数据结构与指定表的一行相同,便于从查询结果中直接赋值给变量...
### ORACLE_PLSQL_基础教程 #### 一、PL/SQL 变量与数据类型 在 Oracle PL/SQL 中,变量是用来存储数据的基本单位。理解并掌握这些变量及其数据类型对于编写有效的 PL/SQL 代码至关重要。 ##### 1.1 数据类型介绍...
复合类型如记录(RECORD)和表类型(TABLE)允许创建自定义数据结构,以存储复杂数据。 **§2.4.3 使用%ROWTYPE** %ROWTYPE关键字可以创建一个变量,其结构与指定的表或视图的列完全匹配,方便地处理行级别的数据。...
此外,RECORD类型允许自定义记录结构,例如`TYPE record_name IS RECORD(field1 type, field2 type...)`,而TABLE类型可以用来创建动态数组,类似于集合。 通过这些基本概念和技巧,开发者可以有效地利用Oracle PL/...
TYPE tabletype IS TABLE OF type(类型名,要保存成的数据类型) INDEX BY BINARY_INTEGER; 例:DECLARE TYPE t_emp IS TABLE OF s_emp%ROWTYPE INDEX BY BINARY_INTERGER; v_emp t_emp; BEGIN SELECT * ...
变长数组可以通过定义数组类型并使用`VARRAY`关键字来创建。 **示例代码:** ```plsql DECLARE TYPE emp_varray IS VARRAY(100) OF employee%ROWTYPE; emps emp_varray; BEGIN emps := emp_varray(100); END; ``...
- **复合类型**:如RECORD、TABLE等,用于存储更复杂的数据结构。 - **%ROWTYPE**:用于匹配表或视图中的一行记录。 - **LOB类型**:用于存储大对象,如BLOB、CLOB。 - **绑定变量**:在SQL语句中使用的特殊变量...
TYPE var_type IS TABLE OF table_name%ROWTYPE INDEX BY PLS_INTEGER; var var_type; -- 定义过程和函数 PROCEDURE proc_name (input_param IN NUMBER, output_param OUT NUMBER); FUNCTION func_name (input...
TYPE emp_table IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER; emp_array emp_table; BEGIN SELECT * BULK COLLECT INTO emp_array FROM employees WHERE department_id = 30; FOR i IN 1..emp_array....
- **复合类型**:例如RECORD、TABLE、VARRAY等。 - **%ROWTYPE 和 %TYPE**:允许开发者定义与数据库表列或行相同类型的变量。 - **LOB 类型**:包括BLOB、CLOB、NCLOB和BFILE,用于存储大容量数据。 **2.3 运算符和...