像这样:
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] 删除。
我来说两句