Oracle中PL/SQL复合数据类型

一、PL/SQL记录:一条记录

可简化单行多列的数据的处理。当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量。

1、当使用自定义的pl/sql记录时,需要分别定义pl/sql记录类型和记录变量。

declare
type emp_record_type is record(
      name emp.ename%type,salary emp.sal%type
      );
            emp_record emp_record_type;
begin
select ename,sal into emp_record from emp where empno=&no;
dbms_output.put_line('雇员名:'||emp_record.name);
dbms_output.put_line('雇员工资:'||emp_record.salary);
end;

2、使用%rowtype 属性定义记录变量

declare
emp_record emp%rowtype;
begin
select * into emp_record from emp where empno=&no;
dbms_output.put_line('姓名: '||emp_record.ename);
dbms_output.put_line('工资: '||emp_record.sal);
end;

二、PL/SQL表:一列数据

用于处理单列多行数据。类似于一维数组。PL/SQL表的元素个数没有限制,且下表可为负数。

语法如下:

type 表类型  is table of  类型
 index by binary_integer;
表变量名  表类型;

index by binary_integer 子句代表以符号整数为索引,访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。可以不按顺序赋值,但必须先赋值后使用。

1、使用PL/SQL表处理单列单行数据

declare
type ename_table_type is table of emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(1) from emp where empno=&eno;
dbms_output.put_line('雇员名: '||ename_table(1));
end;

2、使用PL/SQL表处理单列多行数据

declare
type ename_table_type is table of emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin
select ename bulk collect into ename_table from emp
where deptno=&dno;
for i in 1..ename_table.count loop
dbms_output.put_line('雇员名: '||ename_table(i));
end loop;
end;

三、PL/SQL记录表:多列多行表

用于处理多行多列数据。类似于多维数组。

定义记录表类型的语法如下:

TYPE table_name IS TABLE OF element_type [NOT NULL]
INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];

记录表中的方法:

  • EXISTS(n):如果集合的第n个成员存在,则返回true
  • COUNT:返回已经分配了存储空间即赋值了的成员数量
  • FIRST:返回成员的最低下标值
  • LAST:返回成员的最高下标值
  • PRIOR(n):返回下标为n的成员的前一个成员的下标。如果没有则返回NULL
  • NEXT(N):返回下标为n的成员的后一个成员的下标。如果没有则返回NULL
  • TRIM:删除末尾一个成员
  • TRIM(n) :删除末尾n个成员
  • DELETE:删除所有成员
  • DELETE(n) :删除第n个成员
  • DELETE(m, n) :删除从n到m的成员
  • EXTEND:添加一个null成员
  • EXTEND(n):添加n个null成员
  • EXTEND(n,i):添加n个成员,其值与第i个成员相同
  • LIMIT:返回在varray类型变量中出现的最高下标值

例1:

declare
type emp_table_type is table of emp%rowtype
index by binary_integer;
emp_table emp_table_type;
begin
select * bulk collect into emp_table from emp where deptno=&dno;
for i in 1..emp_table.count loop
dbms_output.put_line('雇员名: '||emp_table(i).ename||',工资: '||emp_table(i).sal);
end loop;
end;

按一维数组使用表:

DECLARE
--定义记录表数据类型
   TYPE reg_table_type IS TABLE OF varchar2(25)
   INDEX BY BINARY_INTEGER;
--声明记录表数据类型的变量
   v_reg_table REG_TABLE_TYPE;

BEGIN
   v_reg_table(1) := 'Europe';
   v_reg_table(2) := 'Americas';
   v_reg_table(3) := 'Asia';
   v_reg_table(4) := 'Middle East and Africa';
   v_reg_table(5) := 'NULL';

   DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_table (1)||'、'       ||v_reg_table (2)||'、'      ||v_reg_table (3)||'、'      ||v_reg_table (4));
   DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_table(5));
END;

四、varry数据类型:数组

具有相同数据类型的一组成员的集合,每个成员都有一个唯一的下标。

定义VARRAY数据类型的语法如下:

TYPE VARRAY_NAME IS VARRAY(SIZE) OF ELEMENT_TYPE [NOT NULL];

VARRAY的使用举例:

DECLARE
--定义一个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型
   TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25);
--声明一个该VARRAY数据类型的变量
   v_reg_varray REG_VARRAY_TYPE;

BEGIN
--用构造函数语法赋予初值
   v_reg_varray := reg_varray_type
         ('中国', '美国', '英国', '日本', '法国');

   DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_varray(1)||'、'
                                    ||v_reg_varray(2)||'、'
                                    ||v_reg_varray(3)||'、'
                                    ||v_reg_varray(4));
   DBMS_OUTPUT.PUT_LINE('赋予初值NULL的第5个成员的值:'||v_reg_varray(5));
--用构造函数语法赋予初值后就可以这样对成员赋值
   v_reg_varray(5) := '法国';
   DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_varray(5));
END;

到此这篇关于Oracle中PL/SQL复合数据类型的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • MySQL与Oracle 差异比较之一数据类型

    数据类型 编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型: MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样 2 Varchar2(n) varchar(n) 3 Date DATATIME 日期字段的处理 MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前

  • oracle常用数据类型说明

    类型 含义 存储描述 备注 CHAR 固定长度字符串 最大长度2000bytes VARCHAR2 可变长度的字符串, 最大长度4000bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000bytes NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000bytes DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS),经过严格测试,无千虫问题 TIMESTAMP 日期(日-月-年) DD-MM-YY(HH-MI-SS:FF

  • MyBatis JdbcType 与Oracle、MySql数据类型对应关系说明

    1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIGINT BIGINT JdbcType BINARY JdbcType BIT BIT JdbcType BLOB BLOB BLOB JdbcType BOOLEAN JdbcType CHAR CHAR CHAR JdbcType CLOB CLOB CLOB–>修改为TEXT JdbcType C

  • Oracle的CLOB大数据字段类型操作方法

    一.Oracle中的varchar2类型 我们在Oracle数据库存储的字符数据一般是用VARCHAR2.VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型,不同场景的最大长度不同. 在Oracle Database中,VARCHAR2 字段类型,最大值为4000:PL/SQL中 VARCHAR2 变量类型,最大字节长度为32767. 当 VARCHAR2 容纳不下我们需要存储的信息时,就出来的Oracle的大数据类型LOB( La

  • ORACLE数据库对long类型字段进行模糊匹配的解决思路

    1.背景介绍 最近在查询数据时,突然遇到了这样一个场景,如何对一个字段类型为long的字段进行模糊匹配.一顿操作以后发现不能使用like进行模糊查询,仔细查看了一下官方文档才发现,long数据类型并不支持该操作.然后就想着将long类型转换为varchar类型然后在进行模糊匹配,通过百度尝试了多种方法,发现效果不太理想.(如果你们发现好的方法欢迎在评论区留言) 2.解决思路 笔者这里采用的思路是: 先创建一个新表,然后将关键信息通过数据类型转换为合适的类型(此处是运用to_lob函数将long类

  • MySQL与Oracle数据类型对应关系(表格形式)

    MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据类型的对应关系. 一.常见数据类型在MySQL与Oracle数据库中的表现形式 说明 mysql oracle 变长字符串 VARCHAR[0-65535] 定义长度默认按字符长度计算,如果是GBK编码的汉字将占用2个字节 VARCHAR2[1-4000] VARCHAR是VARCHAR2的同义词

  • Oracle中PL/SQL复合数据类型

    一.PL/SQL记录:一条记录 可简化单行多列的数据的处理.当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量. 1.当使用自定义的pl/sql记录时,需要分别定义pl/sql记录类型和记录变量. declare type emp_record_type is record( name emp.ename%type,salary emp.sal%type ); emp_record emp_record_type; begin s

  • Oracle中PL/SQL的块与表达式

    一.块(Block) 是PL/SQL的基本执行单元,由定义部分,执行部分(必须)和例外处理部分组成. Declare /*定义部分――定义常量.变量.游标.例外.复杂数据类型*/ Begin /*执行部分――要执行的pl/sql语句和sql语句*/ Exception /*例外处理部分――处理运行的各种错误*/ end; 例: declare v_ename varchar2(5); v_sal number(7,2); begin select ename,sal into v_ename,v

  • Oracle中PL/SQL的用法总结

    目录 一.PLSQL基本结构 1.基本数据类型变量 1. 基本数据类型 2. 基本数据类型变量的定义方法 2.表达式 1. 数值表达式 2. 字符表达式 3. 关系表达式 4. 逻辑表达式 3.PLSQL函数 4.系统输出打印 5.PL/SQL中的变量声明 二.变量赋值方式 三.PLSQL复合类型 1.记录类型record 2.表类型变量table 1. 定义一维表类型变量 2. 定义多维表类型变量 四. %type和%rowtype 五.PLSQL变量的可见空间 六.PLSQL流程控制 if判

  • Oracle中PL/SQL中if语句的写法介绍

    复制代码 代码如下: /*If语句:判断用户输入的数字.*/set serveroutput on --接收键盘输入accept num prompt '请输入一个数字:'; declare   --将屏幕输入的数字付给变量  pnum number := #begin  if pnum = 0 then dbms_output.put_line('您输入的是0');  end if; if pnum = 1 then dbms_output.put_line('您输入的是1');  e

  • Oracle对PL/SQL中的异常处理

    目录 一.异常处理 1.三种的异常类型: 2.异常的SQLCode 和 SQLERRM 二.处理预定义例外 常见错误预定义的名称 三.处理非预定义例外(exception_init) 四.处理自定义例外(通过Raise ) 五.应用程序的异常处理.(通过Raise_Application_Error ) 一.异常处理 PL/SQL提供了良好的异常处理机制,当程序运行出现错误时就会触发异常.异常被触发时,程序执行即终止,在PL/SQL块中提供了异常处理的部分,从而可以捕获一个异常进行特殊处理. 1

  • Oracle在PL/SQL中嵌入SQL语句

    PL/SQL块中只能直接嵌入SELECT.DML(INSERT,UPDATE,DELETE)以及事务控制语句(COMMIT,ROLLBACK,SAVEPOINT), 而不能直接嵌入DDL语句(CREATE,ALTER,DROP)和DCL语句(GRANT,REVOKE) 1.嵌入SELECT语句 使用SELECT INTO语句时,必须要返回一条数据,并且只能返回一条数据. v_ename emp.ename%type; v_sal emp.sal%type; select ename,sal in

  • Oracle在PL/SQL中使用子查询

    目录 一.概述 1.单行子查询(子查询只返回一行) 2.多行单列子查询(子查询返回多行) 3.多列子查询 二.在DDL语句中使用子查询 1.create table 2.create View 3.create materialized view 建立实体化视图 三.在DML语句中使用子查询 1.INSERT 2.UPDATE 3.DELETE 四.WITH语句 五.相关子查询. 一.概述 在一个SQL语句中嵌套另一个SQL语句成为子查询.包括单行子查询,多行子查询,多列子查询. 注意,当在DD

  • Oracle在PL/SQL中使用存储过程

    目录 一.概述 二.存储过程详解 1.创建过程语法: 2.创建存储过程 3.调用存储过程 4.C# 调用: 三.存储过程返回记录集SYS_REFCURSOR 1.返回单行语法 2.返回多行语法 四.维护存储过程 1.删除过程 2.显示过程代码 3.查看过程状态 4.重新编译过程 五. 过程与函数比较 1.相同点: 2.不同点: 六. 与过程相关数据字典 一.概述 过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储于数据库中. 并通过输入.输出和输入输出参数与其调用者交换信息

  • Oracle使用PL/SQL操作COM对象

    正在看的ORACLE教程是:Oracle使用PL/SQL操作COM对象.PL/SQL是由Oracle公司对标准SQL进行扩展,专用于Oracle数据库中程序设计的专用语言,属第三代过程式程序设计语言.从Oracle8开始提供了直接从PL/SQL中调用外部C语言过程,允许开发人员用PL/SQL进行使用C语言编制的程序模块.从Oracle8i开始,又引入了Java程序. 在本文中主要介绍外部例程的基本原理以及使用条件,介绍如何通过引用外部例程来操作Windows中的COM对象,并做了一个操作Exce

  • oracle中动态SQL使用详细介绍

    1.静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进行确定,只能在用户输入一定的查询条件后才能提交给SQL引擎进行处理.通常,静态SQL采用前一种编译方式,而动态SQL采用后一种编译方式.

随机推荐