Я пытаюсь получить данные из вложенной таблицы в виде sql, но когда я хочу добавить объединение, оракул говорит inconsistent data type.
).
Когда я делаю:
CREATE OR REPLACE FORCE VIEW MY_VIEW
(
VAR_1,
VAR_2,
VAR_3,
VAR_4,
VAR_5
)
BEQUEATH DEFINER
AS
SELECT
'0-0' CHILD_ENTITY_ID,
NULL PARENT_ENTITY_ID,
T2.LEVEL_ID ENTITY_ID,
NULL PARENT_LEVEL_TYPE_ID,
(SELECT ALERT_DAYS FROM TABLE(T6.ALERT_DAYS)) ALERT_DAYS
FROM MA_TABLE_1 T1,
MA_TABLE_2 T2,
MA_TABLE_3 T3,
MA_TABLE_4 T4,
MA_TABLE_5 T5,
MA_TABLE_6 T6,
MA_TABLE_7 T7
WHERE T1.LEVEL_TYPE_ID = 0
AND T1.LEVEL_TYPE_ID = T2.LEVEL_TYPE_ID
AND T4.RATE_ID = T2.RATE_ID
AND T4.COUNTER_DIVIDED_ID = T5.COUNTER_ID
AND T2.ALERT_ID = T6.ALERT_ID(+)
AND T2.RATE_ID = T7.RATE_ID
UNION
SELECT
'1-' || T2.OPERATOR_ID CHILD_ENTITY_ID,
'0-0' PARENT_ENTITY_ID,
T2.OPERATOR_ID ENTITY_ID,
0 PARENT_LEVEL_TYPE_ID,
(SELECT ALERT_DAYS FROM TABLE(T6.ALERT_DAYS)) ALERT_DAYS
FROM MA_TABLE_3 T2,
MA_TABLE_2 T3,
MA_TABLE_4 T4,
MA_TABLE_5 T5,
MA_TABLE_6 T6,
MA_TABLE_7 T7
WHERE ((T3.LEVEL_TYPE_ID = 1 AND T3.LEVEL_ID = T2.OPERATOR_ID))
AND T3.LEVEL_TYPE_ID =
(SELECT MAX (T4.LEVEL_TYPE_ID)
FROM SMS_MONITORING_THRESHOLD T4
WHERE ((T4.LEVEL_TYPE_ID = 1
AND T4.LEVEL_ID = T2.OPERATOR_ID))
AND T4.RATE_ID = T3.RATE_ID
AND T3.CHANNEL_ID = T4.CHANNEL_ID)
AND T4.RATE_ID = T3.RATE_ID
AND T4.COUNTER_DIVIDED_ID = T5.COUNTER_ID
AND T3.ALERT_ID = T6.ALERT_ID(+)
AND T3.RATE_ID = T7.RATE_ID;
Я получил сообщение об ошибке "неправильные типы данных".
Я также пытался добавить to_char (... ALERT_DAYS), но безуспешно.
Мне удалось избежать ошибки с этим обновлением:
CREATE OR REPLACE FORCE VIEW MY_VIEW
(
VAR_1,
VAR_2,
VAR_3,
VAR_4,
VAR_5
)
BEQUEATH DEFINER
AS
SELECT
'0-0' CHILD_ENTITY_ID,
NULL PARENT_ENTITY_ID,
T2.LEVEL_ID ENTITY_ID,
NULL PARENT_LEVEL_TYPE_ID,
T8.*
FROM MA_TABLE_1 T1,
MA_TABLE_2 T2,
MA_TABLE_3 T3,
MA_TABLE_4 T4,
MA_TABLE_5 T5,
MA_TABLE_6 T6,
MA_TABLE_7 T7,
TABLE(T2.ALERT_DAYS) T8
WHERE T1.LEVEL_TYPE_ID = 0
AND T1.LEVEL_TYPE_ID = T2.LEVEL_TYPE_ID
AND T4.RATE_ID = T2.RATE_ID
AND T4.COUNTER_DIVIDED_ID = T5.COUNTER_ID
AND T2.ALERT_ID = T6.ALERT_ID(+)
AND T2.RATE_ID = T7.RATE_ID
UNION
SELECT
'1-' || T2.OPERATOR_ID CHILD_ENTITY_ID,
'0-0' PARENT_ENTITY_ID,
T2.OPERATOR_ID ENTITY_ID,
0 PARENT_LEVEL_TYPE_ID,
T8.*
FROM MA_TABLE_3 T2,
MA_TABLE_2 T3,
MA_TABLE_4 T4,
MA_TABLE_5 T5,
MA_TABLE_6 T6,
MA_TABLE_7 T7,
TABLE(T3.ALERT_DAYS) T8
WHERE ((T3.LEVEL_TYPE_ID = 1 AND T3.LEVEL_ID = T2.OPERATOR_ID))
AND T3.LEVEL_TYPE_ID =
(SELECT MAX (T4.LEVEL_TYPE_ID)
FROM SMS_MONITORING_THRESHOLD T4
WHERE ((T4.LEVEL_TYPE_ID = 1
AND T4.LEVEL_ID = T2.OPERATOR_ID))
AND T4.RATE_ID = T3.RATE_ID
AND T3.CHANNEL_ID = T4.CHANNEL_ID)
AND T4.RATE_ID = T3.RATE_ID
AND T4.COUNTER_DIVIDED_ID = T5.COUNTER_ID
AND T3.ALERT_ID = T6.ALERT_ID(+)
AND T3.RATE_ID = T7.RATE_ID;
Но сейчасмой взгляд ничего не возвращает, и я не понимаю, почему, если у вас есть идеи, пожалуйста, дайте мне знать