oracle将自定义类型数据清空,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; 这种赋值方法是错的,赋值需要

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值