`

oracle的自定义类型

阅读更多

可用用关键字create type 或者直接用type定义自定义类型,

 

区别是 用 create 后面用 as , 若直接用 type 后面用 is,另 type用在语句块中,而create 是的独立的.

 

declare   

   type t_table is table of varchar2(10) index by BINARY_integer;   

   MyTab   t_table;   

begin  

   MyTab(1) :=  'A';   

   MyTab(2) :=  'B';   

   MyTab(3) :=  'C';   

   DBMS_OUTPUT.PUT_LINE('First index:'||'   '|| mytab(1) ||'   ');   

end;  

 

declare 

  o o_air := (1,'test');

begin

  select 1 from dual; 

end;

/

 

自定义类型一般分为两中,object类型和table类型.object类似与一个recored可以表示一个表的一行数据,

 

 

 

object的字段就相当与表的字段.

 

自定义的table类型需要用的已经定义好的object类型.

 

一般定义object的语法:

 

用 

create type 自定义表类型A as table of 自定义Object类型A 

和 

create type 自定义Object类型A as object(

字段1 类型1,

字段2 类型2

);

 

与 

type 自定义表类型B is table of 类型 

和 

type 自定义Object类型B is record(

字段1 类型1,

字段2 类型2

);

 

 

实例:

 

(1)定义对象类型:TYPE sales_country_t

CREATE TYPE sales_country_t AS OBJECT (

   YEAR              VARCHAR2 (4),

   country           CHAR (2),

   sum_amount_sold   NUMBER

);

 

(2)定义表类型:TYPE SUM_SALES_COUNTRY_T_TAB

CREATE TYPE sum_sales_country_t_tab AS TABLE OF sales_country_t;

 

(3)定义对象类型:TYPE sales_gender_t

CREATE TYPE sales_gender_t AS OBJECT (

   YEAR              VARCHAR2 (4),

   country_id        CHAR (2),

   cust_gender       CHAR (1),

   sum_amount_sold   NUMBER

);

 

(4)定义表类型:TYPE SUM_SALES_GENDER_T_TAB

CREATE TYPE sum_sales_gender_t_tab AS TABLE OF sales_gender_t;

 

(5) 也可以使用基本类型定义  表类型比如:

 

create or replace type test_tab_type as table of varchar2(4000);

/

 

varchar2(4000) 是一个资本类型,这样相当于定义的表中只有一个字段varchar2(4000)

 

用法:

 

 

TYPE sales_country_t_rec IS RECORD (

      YEAR              VARCHAR (4),

      country           CHAR (2),

      sum_amount_sold   NUMBER

   );

 

v_sales_country_t_rec sales_country_t_rec;

 

引用: 

 

v_les_country_t_rec.year := 'ssss'; 

v_sales_country_t_rec.country := 'a'; 

v_sales_country_t_rec.sum_amount_sold := 2 ;

 

----------------------------------------------------------

1 首先创建一个数据类型

create type t_air  as object(id int ,name varchar(20));

2 创建表

create table aaa(

        id int ,person t_air);

3 插入数据

insert into aaa values(1,t_air(1,'23sdf'));

4 查询classPlace

select a.id ,a.persion.id,a.person.name from aaa a;

 

t_air(1,'23sdf') 使用这个方式创建一个自定义类型t_air的对象.

 

------------------------------------------------------------

 

关于 index by

 

declare   

   type t_table is table of varchar2(10) index by BINARY_integer;   

   MyTab   t_table;   

begin  

   MyTab(1) :=  'A';   

   MyTab(2) :=  'B';   

   MyTab(3) :=  'C';   

   DBMS_OUTPUT.PUT_LINE('First index:'||'   '|| mytab(1) ||'   ');   

end;  

 

详细参考:http://blog.csdn.net/feimashenhua/article/details/7177948

 

--------------------------------------------------------------------

oracle自定义函数是最重要的函数之一,下面就为您介绍oracle自定义函数的使用,实现返回表类型,希望对您能够有所帮助

 

 

oracle中的函数可以返回表类型。但是,这个表类型实际上是集合类型(与数组类似)这个类型不能直接作为 from 的宾语。

  

从oracle 9i 开始,提供了一个叫做“管道化表函数”的概念,来解决这个问题。

这种类型的函数,必须返回一个集合类型,且标明 pipelined。

这个函数不能返回具体变量,必须以一个空 return 返回。

这个函数中,通过 pipe row () 语句来送出要返回的表中的每一行。

  

调用这个函数的时候,通过 table() 关键字把管道流仿真为一个数据集 

以下是一个十分简单的实例:

 

create table tb1(k number, v varchar2(10));  

 

insert into tb1(k, v) values(100,'aaa');  

insert into tb1(k, v) values(200,'bbb');  

insert into tb1(k, v) values(200,'ccc');  

 

select * from tb1;  

 

create type row_type1 as object(k number, v varchar2(10));  

 

create type table_type1 as table of row_type1;  

 

create or replace function fun1 return table_type1 pipelined as  

v row_type1;  

begin  

for myrow in (select k, v from tb1) loop  

  v := row_type1(myrow.k, myrow.v);  

  pipe row (v);  

end loop;  

return;  

end;  

 

select * from table(fun1);

 

---------------------------------------------------

oracle 表类型变量的使用 

http://blog.sina.com.cn/s/blog_8e5087d101014a1l.html

 

使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外

 

一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。

创建表类型的语法如下:

TYPE table_name IS TABLE OF data_type [ NOT NULL ]

INDEX BY BINARY_INTEGER ;

语法说明如下:

--table_name  创建的表类型名称。

--IS TABLE  表示创建的是表类型。

--data_type  可以是任何合法的PL/SQL数据类型,例如varchar2。

--INDEX BY BINARY_INTEGER  指定系统创建一个主键索引,用于引用表类型变量中的特定行。

使用表类型的例子:

 例一:直接对表类型变量赋值

declare

type my_emp is table of scott.emp%rowtype

index by binary_integer;

new_emp my_emp;

begin

new_emp(1).empno:=6800;

new_emp(1).ename:='tracy';

new_emp(1).job:='clerk';

new_emp(1).sal:=2500;

new_emp(2).empno:=6900;

new_emp(2).ename:='luck';

new_emp(2).job:='manager';

new_emp(2).sal:=4000;

dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||

','||new_emp(1).sal);

dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||

','||new_emp(2).sal);

end;

/

例二:使用表类型变量的方法:变量名.方法名[索引号]

declare

type my_emp is table of scott.emp%rowtype

index by binary_integer;

new_emp my_emp;

begin

new_emp(1).empno:=6800;

new_emp(1).ename:='tracy';

new_emp(1).job:='clerk';

new_emp(1).sal:=2500;

new_emp(2).empno:=6900;

new_emp(2).ename:='luck';

new_emp(2).job:='manager';

new_emp(2).sal:=4000;

dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);

dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||

','||new_emp(1).sal);

dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||

','||new_emp(2).sal);

--new_emp.delete(1);

dbms_output.put_line(new_emp.next(1));

end;

//

例三:与游标结合使用

declare

type my_emp is table of scott.emp%rowtype

index by binary_integer;

new_emp my_emp;

v_num number:=0;

cursor cur_emp is select empno,ename,job,sal from scott.emp;

begin

for v_emp in cur_emp loop

v_num:=v_num+1;

select * into new_emp(v_num) from scott.emp

where ename=v_emp.ename;

end loop;

for i in 1..new_emp.count loop

dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||

','||new_emp(i).sal);

end loop;

end;

/

注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要

 

使用下标,如上面的的例子。

分享到:
评论

相关推荐

    Oracle数据库之C#中调用示例Oracle自定义类型(自定义Object对象)

    C#调用Oracle自定义类型存储过程,Oracle存储入参为type类型,对于不熟悉Oracle朋友,可以参考来调用。实现思路和正常调MSSQL一样,先建立连接,再定义一个IOracleCustomType的类,然后Oracle.DataAccess.dll的...

    C#调用Oracle自定义类型存储过程.rar

    C#调用Oracle自定义类型存储过程,Oracle存储入参为type类型,对于不熟悉Oracle朋友,可以参考来调用。实现思路和正常调MSSQL一样,先建立连接,再定义一个IOracleCustomType的类,然后Oracle.DataAccess.dll的...

    oracle自定义日期函数

    Oracle 自定义日期函数 Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,...

    oracle 自定义数据结构和表类型实验

    4. 分析与讨论:讨论自定义类型在实际问题中的应用,比较其优缺点,以及与标准数据类型的区别。 5. 实践应用:给出一个或多个实际场景,解释如何利用自定义数据结构和表类型解决特定问题。 通过这个实验,你不仅会...

    Oracle自定义聚合函数-分析函数

    Oracle 自定义聚合函数-分析函数 Oracle 自定义聚合函数是一种强大且灵活的功能,允许用户根据自己的需求创建自定义的聚合函数。聚合函数是一种特殊的函数,它可以对一组数据进行处理和计算,并返回一个结果。 ...

    14.Oracle自定义函数1

    在 Oracle 数据库中,自定义函数是一种非常重要的特性,允许用户根据需求创建自己的功能模块,以扩展数据库的内置功能。本文将详细讲解如何创建、调用和管理自定义函数,以及讨论它们在实际应用中的优缺点。 一、...

    Ibatis调用Oracle存储过程返回自定义类型

    #### Oracle自定义类型简介 Oracle支持用户自定义数据类型,这为复杂数据结构的应用提供了极大的便利。自定义类型可以是对象类型(OBJECT)或表类型(TABLE OF)。下面通过示例详细介绍如何创建和使用自定义类型: ...

    oracle自定义函数总结

    本文将详细介绍Oracle自定义函数的定义、使用方法以及一些高级特性。 #### 二、基本语法与定义 1. **定义函数的基本语法**: ```sql CREATE [OR REPLACE] FUNCTION function_name (参数列表) RETURN 返回类型 ...

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

    在C#中,我们需要创建一个表示Oracle自定义类型的类,然后提供一个方法将List转换为OracleDbType对应的数组。 ```csharp public class MyType { public int Id { get; set; } public string Name { get; set;...

    oracle自定义异常

    ### Oracle自定义异常知识点 #### 一、Oracle异常处理机制简介 在Oracle PL/SQL编程中,异常处理是一项非常重要的功能。它可以帮助开发者捕获并处理程序运行时可能发生的错误情况,确保应用程序能够稳定可靠地运行...

    JPublisher生成Oracle对象类型对应的Java对象例子

    在Oracle数据库中,PL/SQL和JAVA是两种常见的编程语言,它们可以协同工作,实现复杂的业务逻辑。在处理Oracle中的自定义对象类型...在实际开发中,尤其是处理大量Oracle自定义类型时,JPublisher是一个非常实用的工具。

    c#调用Oracle UDT自定义结构数组类型源代码

    本篇文章将深入探讨如何在C#中调用Oracle的UDT(用户定义类型)以处理自定义结构数组类型,并提供相关的源代码示例。 UDT在Oracle数据库中允许我们创建自定义的数据类型,这些类型可以包含复杂的数据结构,如结构体...

    Oracle Exception汇总(自定义Oracle异常)

    Oracle数据库在处理错误和异常时有一套完整的机制,这些异常主要分为预定义异常和自定义异常。预定义异常是Oracle系统已经内置的一些常见错误,它们都有对应的错误代码(ORA-xxx)。下面,我们将深入探讨一些常见的...

    Oracle自定义脱敏函数的代码详解

    总的来说,Oracle自定义脱敏函数提供了一种灵活的方式,可以根据业务需求定制不同类型的敏感数据脱敏策略。这样的函数在处理大量用户数据时非常有用,能够帮助满足法规遵从性和数据安全要求。通过理解并应用这些规则...

    Oracle中用GROUPING SETS分组自定义汇总

    在Oracle数据库中,进行数据分析和报表制作时,我们经常需要对数据进行分组汇总,以得到不同层次的统计结果。`GROUP BY`语句是实现这一功能的基础,但默认情况下,它只提供单级的汇总信息。为了获取多级或自定义的...

    Oracle10g自定义聚合函数(字符串拼接)

    * 可自定义指定排序字段sequence,对于数字或日期类型的字段,先转为字符串,比如to_char(line, 'FM000') * 由于聚合函数只支持一个参数,这里使用对象类型实现传入多个参数 * Oracle11g Release2版本引入了...

    Oracle Create Type 详解

    Oracle Create Type 是 Oracle 数据库中的一种强大工具,可以用于创建自定义类型,例如对象类型、数组类型、表类型等。在本文中,我们将详细介绍 Oracle Create Type 的概念、语法和应用。 1. Oracle Create Type ...

    Oracle自定义聚集函数使用

    本文将深入探讨Oracle自定义聚集函数的实现与应用,包括其四个主要组成部分:`ODCIAggregateInitialize`、`ODCIAggregateIterate`、`ODCIAggregateMerge`以及`ODCIAggregateTerminate`。 ### ...

    51CTO下载-java-操作Oracle-批量入库的问题.pdf

    作者进行了不同方式的性能测试,比较了Oracle自定义类型、基本类型定义表类型以及JDBC批处理的插入速度。通常,批处理和自定义类型都是为提高批量操作效率而设计的,但实际效果可能会因数据量、网络延迟、数据库...

Global site tag (gtag.js) - Google Analytics