Мне нужно извлечь одну строку из двух представлений, используя флаг из родительского представления, чтобы определить, какой из них запрашивать. Просто для того, чтобы сфокусировать дело:
declare
rowRetrived v_child_A%rowtype;
for key in (select value1, value2, value3, flag from v_parent_view) loop
if flag = 'A' then
select * into rowRetrived
from v_child_A
where field1 = key.value1
and field2 = key.value2
and field3 = key.value3;
end if;
if flag = 'B' then
select * into rowRetrived -- **** HERE THE ERROR IS RAISED ****
from v_child_B
where field1 = key.value1
and field2 = key.value2
and field3 = key.value3;
end if;
doStuff(rowRetrived);
end loop;
...
Я нигде не использую тип данных LONG иЯ проверяю, что два дочерних представления имеют одинаковые поля и одинаковые типы.Я очень тяжело борюсь с этой проблемой, потому что я не знаю, как ее отладить.
Некоторые соображения:
- и v_child_A, и v_child_B работают либо без, либо с фильтрами (например:где условие
where filed1 = 'value1' and field2 = 'value2' and field3 = 'value3'
) - , хотя структура представлений одинакова, я пытаюсь объявить два различных типа строк, но ошибка все еще возникает
****** EDIT ******
Здесь следуют фактические описания представлений
V_PARENT_VIEW
ID_DISTRIBUZIONE NUMBER 22
ID_TRAGITTO_DISTR VARCHAR2 40
PROGR_TRAGITTO NUMBER 22
SHIP_OU_ID VARCHAR2 15
ACCNT_NAME VARCHAR2 100
ROW_ID_DEST VARCHAR2 15
EDITO NUMBER 22
EXTRA NUMBER 22
v_child_A
ID_DISTRIBUZIONE NUMBER 22
COD_DESTINATARIO VARCHAR2 100
ID_DESTINATARIO VARCHAR2 15
DESTINATARIO VARCHAR2 50
RIGA_LOCALITA VARCHAR2 50
INDIRIZZO VARCHAR2 50
FRAZIONE VARCHAR2 50
PRESSO VARCHAR2 50
PVUFF NUMBER 22
NOTA_CONSEGNA VARCHAR2 100
TEL_DESTINATARIO VARCHAR2 20
FUNZIONARIO VARCHAR2 30
TEL_FUNZIONARIO VARCHAR2 20
RIGA_LOCALITA_DEST VARCHAR2 50
INDIRIZZO_DEST VARCHAR2 50
FRAZIONE_DEST VARCHAR2 50
PRESSO_DEST VARCHAR2 50
TRASPORTATORE VARCHAR2 50
ID_DISTRIBUTORE VARCHAR2 15
ID_TRAGITTO_DISTR VARCHAR2 40
PROGR_TRAGITTO NUMBER 22
CONS_FATTURA NUMBER 22
NUMERO_VERDE_TEL VARCHAR2 20
SERVIZIO_CLIENTI_FAX VARCHAR2 20
SERVIZIO_CLIENTI_TEL VARCHAR2 20
SERVIZIO_CLIENTI_EMAIL VARCHAR2 20
CANALE VARCHAR2 100
ID_PROVINCIA NUMBER 22
ID_REGIONE NUMBER 22
ID_NAZIONE NUMBER 22
CAPOLUOGO NUMBER 22
PROVINCIA VARCHAR2 2
ROW_ID_DEST VARCHAR2 15
POSIZIONE VARCHAR2 50
v_child_B
ID_DISTRIBUZIONE NUMBER 22
COD_DESTINATARIO VARCHAR2 100
ID_DESTINATARIO VARCHAR2 15
DESTINATARIO VARCHAR2 50
RIGA_LOCALITA VARCHAR2 50
INDIRIZZO VARCHAR2 50
FRAZIONE VARCHAR2 50
PRESSO VARCHAR2 50
PVUFF NUMBER 22
NOTA_CONSEGNA VARCHAR2 200
TEL_DESTINATARIO VARCHAR2 20
FUNZIONARIO VARCHAR2 30
TEL_FUNZIONARIO VARCHAR2 20
RIGA_LOCALITA_DEST VARCHAR2 50
INDIRIZZO_DEST VARCHAR2 50
FRAZIONE_DEST VARCHAR2 50
PRESSO_DEST VARCHAR2 50
TRASPORTATORE VARCHAR2 50
ID_DISTRIBUTORE VARCHAR2 15
ID_TRAGITTO_DISTR VARCHAR2 40
PROGR_TRAGITTO NUMBER 22
CONS_FATTURA NUMBER 22
NUMERO_VERDE_TEL VARCHAR2 20
SERVIZIO_CLIENTI_FAX VARCHAR2 20
SERVIZIO_CLIENTI_TEL VARCHAR2 20
SERVIZIO_CLIENTI_EMAIL VARCHAR2 20
CANALE VARCHAR2 100
ID_PROVINCIA NUMBER 22
ID_REGIONE NUMBER 22
ID_NAZIONE NUMBER 22
CAPOLUOGO NUMBER 22
PROVINCIA VARCHAR2 2
ROW_ID_DEST VARCHAR2 15
POSIZIONE VARCHAR2 50