У меня есть таблица (phone_item), которая имеет структурный ключ (varchar), значение (varchar), описание (varchar). Мне нужно перенести эту таблицу в другую таблицу (телефон), где column_name = ключ и значения строки должны быть вставлены из столбца значения. Но мне нужно вставить разные типы данных значений, в зависимости от типа данных в телефонной таблице
Если тип данных столбца номер, мне нужно преобразовать phone_item.value в число
Если дата мне нужно конвертировать в дату и т. Д.
Есть сводная таблица (ТЕЛЕФОН):
CREATE TABLE "TEST_DB"."PHONE"
(
"PERSON_ID" NUMBER(12,4) NOT NULL ENABLE,
"PHONE_ID" NUMBER(12,4) NOT NULL ENABLE,
"ID" NUMBER(12,4),
"PHONE_TYPE" VARCHAR2(1000 CHAR),
"NUMBER" VARCHAR2(1000 CHAR),
"PROCESS_DATE" DATE DEFAULT sysdate,
"PROCESS_DTIME" TIMESTAMP (6) DEFAULT systimestamp
) ;
Необходимо переставить таблицу:
CREATE TABLE "TEST_DB"."PHONE_ITEM"
(
"PHONE_ID" NUMBER(12,4),
"KEY" VARCHAR2(1000 CHAR),
"VALUE" VARCHAR2(1000 CHAR),
"DESCRIPTION" VARCHAR2(1000 CHAR),
"PERSON_ID" NUMBER(12,4)
);
Пример:
+-------------+--------+-------------+
| key | value | description |
+-------------+--------+-------------+
| phoneNumber | 911 | |
| phoneType | iPhone | |
+-------------+--------+-------------+
Мне нужно перенести его на:
+-------------+-----------+
| phoneNumber | phoneType |
+-------------+-----------+
| 911 | iPhone |
+-------------+-----------+
Я пытался выбрать значения и преобразовать их в разные типы, но получил эту ошибку:
ORA-00932: несовместимые типы данных: ожидаемое число получило дату.
00932. 00000 - «несовместимые типы данных: ожидается% s получил% s»
SELECT max(CASE
WHEN (
(SELECT Data_type
FROM all_tab_columns
WHERE TABLE_NAME='PHONE'
AND COLUMN_NAME='ID') = 'NUMBER') THEN
(SELECT TO_NUMBER(phone_item.value)
FROM phone_item
WHERE table_id = 45
AND phone_id = 43
AND phone_item.key='ID')
WHEN (
(SELECT Data_type
FROM all_tab_columns
WHERE TABLE_NAME='PHONE'
AND COLUMN_NAME='ID') = 'DATE') THEN
(SELECT TO_DATE(phone_item.value, 'yyyy')
FROM phone_item
WHERE table_id = 45
AND phone_id = 43
AND phone_item.key='ID')
ELSE phone_item.value
END)
FROM phone_item;