从未创建的 oracle 表中选择,并且未在数据库中创建类型

vlddlv4

像这样:

CREATE OR REPLACE type P_REC AS OBJECT
(
    ATTR1    VARCHAR2(64 BYTE),
    ATTR2    VARCHAR2(128 BYTE),
    ATTR3    VARCHAR2(128 BYTE),
    ATTR4    VARCHAR2(128 BYTE)
);
CREATE OR REPLACE type P_REC_LIST is table of P_REC;


DECLARE
tmpPList P_REC_LIST := P_REC_LIST(P_REC('A1','A2','A3','A4'),
                                  P_REC('B1','B2','B3','B4'),
                                  P_REC('C1','C2','C3','C4') 
                                  );
BEGIN
   testProc(tmpPList);
END;

然后我可以写:

 select * from TABLE(tmpPList)

但问题是我不想在数据库中创建任何类型,因为数据库被禁止更改架构。

我想这样写:

select * from ( ( ('att1','att2','att3','att4'),('att1a','att2a','att3a','att4a') ) ) t

但在语法上是不允许的。

有没有办法即时选择一张桌子?

最终目标与这篇文章相同:合并和删除,但重点是我无法在 oracle 中创建类型

托尔斯滕·凯特纳

在标准 SQL 中,您将使用VALUES行构造函数。

select * from (values ('att1'), ('att2'), ('att3'), ('att4')) t(attr)

但是 Oracle 仍然不支持它。

您可以选择单个值(在 Oracle 中您必须从中选择DUAL),然后用于UNION ALL获取整个数据集:

select 'att1' as attr from dual
union all
select 'att2' as attr from dual
union all
select 'att3' as attr from dual
union all
select 'att4' as attr from dual;

对于更多列,选择更多列:-)

select 'att11' as attr1, 'att12' as attr2, 'att13' as attr3 from dual
union all
select 'att21' as attr1, 'att22' as attr2, 'att23' as attr3 from dual

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章