Oracle REF 数据类型
Oracle REF data type
我正在努力使这个查询工作。我想在 Oficina_bancaria 的嵌套 table Cuentas 中插入存储在 Cuenta table:
中的 Corriente_udt 行的 ref()
(SELECT ref(TREAT(VALUE(c) AS Corriente_udt)) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');
Corriente_udt 是 Cuenta_udt 的子类型,它是 Cuenta table.
的数据类型
这是我遇到的错误:
ORA-00907: missing right parenthesis
我已经试过了:
(SELECT ref(c) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');
但是我也得到一个错误:
ORA-00932: inconsistent datatypes: expected REF USER.CORRIENTE_UDT got REF USER.CUENTA_UDT
这是我的完整查询:
INSERT INTO TABLE (SELECT o.Cuentas FROM Oficina_bancaria o WHERE o.Codigo = 1439 AND o.Direccion = 'Alameda de Esperanza Vives 978 Valencia, 32678') (SELECT ref(TREAT(VALUE(c) AS Corriente_udt)) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');
I want to insert in Oficina_bancaria's nested table Cuentas the ref() of a Corriente_udt row stored in Cuenta table
它不完全清楚你想从你的描述中得到什么,但我想你想在现有行中添加对 Cuentas
列(corrientes_array
数据类型)的引用Oficina_bancaria
table.
查询:
UPDATE Oficina_bancaria
SET Cuentas = COALESCE( Cuentas, Corrientes_array() )
MULTISET UNION
Corrientes_array(
( SELECT TREAT( REF(c) AS REF Corriente_udt )
FROM Cuenta c
WHERE c.IBAN = '1654ES6639071895270420369756' )
)
WHERE Codigo = 6356
AND Direccion = 'Cuesta Hector Montes 15 Puerta 5 Cuenca, 02539'
或者,也许:
MERGE INTO Oficina_bancaria o
USING (
SELECT TREAT( REF(c) AS REF Corriente_udt ) AS Corriente_ref
FROM Cuenta c
WHERE c.IBAN = '1654ES6639071895270420369756'
) c
ON (
o.Codigo = 6356
AND o.Direccion = 'Cuesta Hector Montes 15 Puerta 5 Cuenca, 02539'
AND c.Corriente_ref IS NOT NULL
)
WHEN MATCHED THEN
UPDATE
SET o.Cuentas = COALESCE( o.Cuentas, Corrientes_array() )
MULTISET UNION Corrientes_array( c.Corriente_ref );
(如果在 Cuenta
table 中找不到,则不应将引用插入数组)。
db<>fiddle here
我正在努力使这个查询工作。我想在 Oficina_bancaria 的嵌套 table Cuentas 中插入存储在 Cuenta table:
中的 Corriente_udt 行的 ref()(SELECT ref(TREAT(VALUE(c) AS Corriente_udt)) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');
Corriente_udt 是 Cuenta_udt 的子类型,它是 Cuenta table.
的数据类型这是我遇到的错误:
ORA-00907: missing right parenthesis
我已经试过了:
(SELECT ref(c) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');
但是我也得到一个错误:
ORA-00932: inconsistent datatypes: expected REF USER.CORRIENTE_UDT got REF USER.CUENTA_UDT
这是我的完整查询:
INSERT INTO TABLE (SELECT o.Cuentas FROM Oficina_bancaria o WHERE o.Codigo = 1439 AND o.Direccion = 'Alameda de Esperanza Vives 978 Valencia, 32678') (SELECT ref(TREAT(VALUE(c) AS Corriente_udt)) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');
I want to insert in Oficina_bancaria's nested table Cuentas the ref() of a Corriente_udt row stored in Cuenta table
它不完全清楚你想从你的描述中得到什么,但我想你想在现有行中添加对 Cuentas
列(corrientes_array
数据类型)的引用Oficina_bancaria
table.
查询:
UPDATE Oficina_bancaria
SET Cuentas = COALESCE( Cuentas, Corrientes_array() )
MULTISET UNION
Corrientes_array(
( SELECT TREAT( REF(c) AS REF Corriente_udt )
FROM Cuenta c
WHERE c.IBAN = '1654ES6639071895270420369756' )
)
WHERE Codigo = 6356
AND Direccion = 'Cuesta Hector Montes 15 Puerta 5 Cuenca, 02539'
或者,也许:
MERGE INTO Oficina_bancaria o
USING (
SELECT TREAT( REF(c) AS REF Corriente_udt ) AS Corriente_ref
FROM Cuenta c
WHERE c.IBAN = '1654ES6639071895270420369756'
) c
ON (
o.Codigo = 6356
AND o.Direccion = 'Cuesta Hector Montes 15 Puerta 5 Cuenca, 02539'
AND c.Corriente_ref IS NOT NULL
)
WHEN MATCHED THEN
UPDATE
SET o.Cuentas = COALESCE( o.Cuentas, Corrientes_array() )
MULTISET UNION Corrientes_array( c.Corriente_ref );
(如果在 Cuenta
table 中找不到,则不应将引用插入数组)。
db<>fiddle here