Нельзя встраивать оператор DML (например, INSERT
) в запрос SQL.
Нельзя встраивать оператор CASE (который является PL / SQL) в запросе SQL.Однако вы можете встроить выражение CASE в запрос SQL, но выражение может только оценивать результат, оно не может включать PL / SQL (см. # 1 выше) *.
Результат, которого вы, похоже, хотите достичь, - запросить некоторые данные из двух таблиц (test1
и tset2
), вычислить выражение и вставить результат обратно в те же таблицы, что иновые записи.Поскольку ваш конечный результат - INSERT
, вы должны начать с этого, а затем создать запрос, который соберет необходимые для него данные, например:
INSERT INTO diff_values(file_type,a_input,b_input,report_date)
SELECT a.file_type,
a.input,
b.input,
a.report_date
FROM test1 a, tset2 b
WHERE a.file_type=b.file_type
AND a.report_date=b.report_date
AND a.input <> b.input;
Обратите внимание, что я удалил COALESCE, потому что ГДЕПредложение гарантирует, что a.file_type и b.file_type в любом случае идентичны, поэтому вы можете просто сослаться на один из этих столбцов.
Теперь ваш исходный оператор также содержит следующие строки:
WHEN a.input = b.input THEN
input_num+1
...
WHEN a.output = b.output THEN
out_num+1
Я не знаю, что они должны делать, но я полагаю, что вы могли бы написать дополнительные запросы, чтобы обнаружить эти условия и вывести результаты.