我已经使用联合的CVAS创建了View:
CREATE
OR REPLACE VIEW SAMPLEVIEW AS
SELECT
PT.CREDITPARTYACCOUNT AS PT_CREDITPARTYACCOUNT,
PT.DEBITPARTYACCOUNT AS PT_DEBITPARTYACCOUNT,
...
...
FROM
accountingevent AE
LEFT OUTER JOIN paymenttransaction PT ON (
AE.PAYMENTTRANSACTIONKEY = PT.PAYMENTTRANSACTIONKEY
)
OR (
AE.PAYMENTINSTRUCTIONKEY = PT.INCOMINGINSTRUCTIONKEY
)
WHERE
...
UNION ALL
SELECT
PT.CREDITPARTYACCOUNT AS PT_CREDITPARTYACCOUNT,
PT.DEBITPARTYACCOUNT AS PT_DEBITPARTYACCOUNT,
...
...
FROM
accountingevent AE
LEFT OUTER JOIN paymenttransaction PT ON (
AE.PAYMENTTRANSACTIONKEY = PT.PAYMENTTRANSACTIONKEY
)
WHERE
...
ORDER BY 1;
结果
DESC SAMPLEVIEW;
PT_CREDITPARTYACCOUNT VARCHAR2(1024 CHAR)
PT_DEBITPARTYACCOUNT VARCHAR2(1024 CHAR)
...
...
AND
DESC PAYMENTTRANSACTION;
CREDITPARTYACCOUNT VARCHAR2(256 CHAR)
DEBITPARTYACCOUNT VARCHAR2(256 CHAR)
...
我得到的数据大小是4倍表列大小的大小。如果我们删除UNION ALL并使用单个CVAS,则表和视图中的大小将相等。该视图和表是大型脚本的一部分,因此脚本中的某些内容已关闭,导致此行为。此奇怪的行为仅在char和varchar2数据类型中可见。我还检查了以下查询的结果:
select * from NLS_DATABASE_PARAMETERS where parameter='NLS_CHARACTERSET';
NLS_CHARACTERSET AL32UTF8
请指导我有关可能导致此问题的错误之处。
谢谢
SQL> desc tukc
Name Null? Type
----------- ----- ------------------
OBJECT_NAME VARCHAR2(128 CHAR)
OBJECT_ID NUMBER
SQL>
SQL> create or replace view tv as
2 select t.object_name
3 from tukc t join all_objects o on (t.object_id=o.object_id)
4 union all
5 select t.object_name
6 from tukc t join all_objects o on (t.object_id=o.object_id)
7 ;
View TV created.
SQL> desc tv
Name Null? Type
----------- ----- ------------------
OBJECT_NAME VARCHAR2(128 CHAR)