oracle怎么查询自定义数据类型,oracle pl/sql中使用自定义数据类型

本文介绍了在Oracle数据库中如何创建和使用自定义数据类型。首先,展示了如何通过`CREATE OR REPLACE TYPE`语句定义一个OBJECT类型的自定义数据类型,如BITS_IDX_BASE。接着,展示了一个示例,将自定义数据类型用于函数的返回类型,该函数通过TCP连接获取并处理数据,将结果存储在自定义类型的表格中返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模式:

CREATE OR REPLACE TYPE 类型名 as OBJECT (属性名 属性类型,...);

举例:

CREATE OR REPLACE TYPE BITS_IDX_BASE AS OBJECT ( NAME VARCHAR2(4000), FIELDS VARCHAR2(4000), CREATE_DATE VARCHAR2(4000), INCREMENT_DATE VARCHAR2(4000) );

CREATE OR REPLACE TYPE BITS_IDX_BASE_TBL AS TABLE OF BITS_IDX_BASE;

自定义类型可用于函数的返回类型:

FUNCTION LIST_BASE return BITS_IDX_BASE_TBL

as

c  utl_tcp.connection;  -- TCP/IP connection to the Web server

ret_val pls_integer;

lastRow varchar(3000);

currentRow varchar(3000);

idx_base_table BITS_IDX_BASE_TBL := BITS_IDX_BASE_TBL();

tmp_pos1 number;

tmp_pos2 number;

tmp_pos3 number;

BEGIN

c := utl_tcp.open_connection(remote_host => currentIdxServerAdr,

remote_port =>  currentIdxServerPort);  -- open connection

ret_val := utl_tcp.write_line(c, 'BITS_IDX_TCP_CMD');    -- send TCP request

ret_val := utl_tcp.write_line(c, 'LISTBASE');

BEGIN

utl_tcp.flush(c);

currentRow := utl_tcp.get_line(c, TRUE);

--currentRow := utl_tcp.get_line(c, TRUE);

lastRow := null;

LOOP

currentRow := utl_tcp.get_line(c, TRUE);

if lastRow is not null then

--dbms_output.put_line(lastRow);

tmp_pos1 := instr(lastRow, '||',1,1);

tmp_pos2 := instr(lastRow, '||',1,2);

tmp_pos3 := instr(lastRow, '||',1,3);

idx_base_table.extend;

idx_base_table(idx_base_table.count) := BITS_IDX_BASE(substr(lastRow, 1, tmp_pos1 - 1), substr(lastRow, tmp_pos1 + 2, tmp_pos2 - tmp_pos1 - 2), substr(lastRow, tmp_pos2 + 2, tmp_pos3 - tmp_pos2 - 2), substr(lastRow, tmp_pos3 + 2));

end if;

lastRow := currentRow;

--dbms_output.put_line(utl_tcp.get_line(c, TRUE));  -- read result

END LOOP;

EXCEPTION

WHEN utl_tcp.end_of_input THEN

NULL; -- end of input

WHEN OTHERS THEN

NULL;

END;

utl_tcp.close_connection(c);

return idx_base_table;

END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值