Oracle的COLLECT函数创建具有随机名称的新集合数据类型

标签 oracle

Oracle 的 COLLECT 函数触发新集合类型的创建。 有没有办法禁用这种行为?

这就是正在发生的事情......

检查现有用户类型

select object_name from user_objects where object_type = 'TYPE'
no rows selected.

使用集合 VARRAY 包装类型创建用户数据类型

CREATE OR REPLACE TYPE TEST_T  
   AS OBJECT (C1 VARCHAR2(20 BYTE), C2 VARCHAR2 (11 Byte));
CREATE OR REPLACE TYPE ARRAY_TEST_T AS VARRAY(200) OF TEST_T;

检查类型...

select object_name from user_objects where object_type = 'TYPE'

OBJECT_NAME                                                                     
------------
TEST_T                                                                          
ARRAY_TEST_T 

2 rows selected.

现在此查询将触发创建新的集合类型:

select cast(collect(TEST_T(c1,c2)) AS ARRAY_TEST_T) 
from (  select '1.1' as c1, '1.2' as c2 from dual ) ;

再次检查类型...

select object_name from user_objects where object_type = 'TYPE'
OBJECT_NAME                                                                     
-----------------------------
TEST_T                                                                          
SYSTP5Iel7MEkRT2osGnB/YcB4A==                                                   
ARRAY_TEST_T                                                                    

3 rows selected.

Oracle 创建了新的集合类型“SYSTP5Iel7MEkRT2osGnB/YcB4A==”,具有以下规范:

CREATE OR REPLACE TYPE "SYSTPzGCo9gclT3WmlUX5SNtEPg==" AS TABLE OF TEST_T

最佳答案

阅读http://www.oracle-developer.net/display.php?id=306

我认为当你定义时它会起作用:

创建或替换类型 ARRAY_TEST_T AS 表 TEST_T;

所以没有 ... 的 varray(200) ,但是 ... 的表。

关于Oracle的COLLECT函数创建具有随机名称的新集合数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834112/

相关文章:

php - 连接两个 MySQL 表,其中连接条件来自其中一个表

oracle - 获取最后插入的id(go + oracle)

java - JSTL中的if语句

database - 如何在 AWS(或任何云)上扩展 Oracle?

sql - Oracle ROWNUM 性能

sql - 如何限制 Oracle 查询排序后返回的行数?

oracle - PL/SQL 中的 DDL 语句?

sql - Oracle SQL - 带有 unix 时间戳的列,需要 dd-mm-yyyy 时间戳

windows - 如何为 SQL*Plus (Windows) 实例设置窗口标题?

甲骨文创建功能