Недавно я получил ответ на вопрос о том, как обновить столбец B таблицы A на значения из столбца D таблицы C, соответствующие идентификаторам.
UPDATE Table2 t2
SET D_N = COALESCE( (SELECT t1.D_N FROM Table1 t1 WHERE t1.D_ID
= t2.D_ID), 0);
Код сработал, и теперь я пытаюсь сделать то же самое, только сравнение не выполняется для полей VARCHAR/VARCHAR2
, а NUMBER
. Поля, на которые я ссылаюсь, D_ID
. Код работал на VARCHAR2/VARCHAR
полях и теперь это NUMBER
.
Я думал, что это будет легко исправить, поэтому я создал временный столбец для каждой таблицы и заполнил его значениями с помощью метода to_char
, и моя схема, как и ожидалось, показывает столбец с типом данных VARCHAR2
для обоих Столбцы Таблица1 и Таблица2 D_ID
.
Я все еще получаю сообщение об ошибке ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
.
DDL для рассматриваемых таблиц:
CREATE TABLE "Table1"
(
"D_ID" NUMBER(4,0),
"D_N" VARCHAR2(30) COLLATE "USING_NLS_COMP" CONSTRAINT "D_N_NN" NOT NULL ENABLE,
"TEMPDEPTID" VARCHAR2(4) COLLATE "USING_NLS_COMP",
CONSTRAINT "D_ID_PK" PRIMARY KEY ("D_ID")
USING INDEX ENABLE
) DEFAULT COLLATION "USING_NLS_COMP"
/
ALTER TABLE "Table1" ADD CONSTRAINT "D_L_FK" FOREIGN KEY ("L_ID")
REFERENCES "Table3" ("L_ID") ENABLE
/
ALTER TABLE "Table1" ADD CONSTRAINT "D_M_FK" FOREIGN KEY ("M_ID")
REFERENCES "Table2" ("E_ID") ENABLE
/
CREATE TABLE "Table2"
(
"D_ID" NUMBER(4,0),
"TEMPDEPTID" VARCHAR2(4) COLLATE "USING_NLS_COMP",
"D_N" VARCHAR2(30) COLLATE "USING_NLS_COMP",
CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("E_ID")
USING INDEX ENABLE,
) DEFAULT COLLATION "USING_NLS_COMP"
/
ALTER TABLE "Table2" ADD CONSTRAINT "EMP_D_FK" FOREIGN KEY ("D_ID")
REFERENCES "Table1" ("D_ID") ENABLE
/
ALTER TABLE "Table2" ADD CONSTRAINT "EMP_M_FK" FOREIGN KEY ("M_ID")
REFERENCES "Table2" ("E_ID") ENABLE
/
Спасибо.