簡體   English   中英

Oracle REF數據類型

[英]Oracle REF data type

我正在嘗試使此查詢正常工作。 我想在Oficina_bancaria的嵌套表Cuentas中插入存儲在Cuenta表中的Corriente_udt行的ref():

(SELECT ref(TREAT(VALUE(c) AS Corriente_udt)) FROM Cuenta c WHERE c.IBAN = '1654ES6639071895270420369756');

Corriente_udt是Cuenta_udt的子類型,它是Cuenta表的數據類型。

這是我得到的錯誤:

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');

我想在Oficina_bancaria的嵌套表Cuentas中插入存儲在Cuenta表中的Corriente_udt行的ref()

尚不清楚您要從描述中獲得什么,但是我想您想在Oficina_bancaria表的現有行中添加對Cuentas列( corrientes_array數據類型)的Oficina_bancaria

查詢

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表中找不到引用,則不應將引用插入數組)。

db <> 在這里撥弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM