#sql #oracle #plsql
#sql #Oracle #plsql
Вопрос:
insert into AIRPORT_DIM
select airportkey_Seq.nextval, AIRPORTID , CITY_NAME,NULL, NULL
from TMP_AIRPORT;
как мне превратить приведенный выше код вставки SQL в код pl / sql, который проверяет, существует ли идентификатор АЭРОПОРТА вновь вставленной строки с другим именем city_name в таблице airport_dim?
если они существуют, то выполните
insert into AIRPORT_DIM
select airportkey_Seq.nextval, AIRPORTID ,NULL,CITY_NAME, sysdate
from TMP_airport;
ещё
insert into airport_dim
select airportkey_Seq.nextval, AIRPORTID , CITY_NAME,NULL, NULL
from TMP_airport;
Ниже приведены таблицы AIRPORT_DIM и TMP_airport.
CREATE TABLE AIRPORT_DIM
(
AIRPORT_KEY NUMBER,
AIRPORT_CODE VARCHAR2(8),
CITY_NAME_CURRENT VARCHAR2(20),
CITY_NAME_NEW VARCHAR2(20),
EFFECTIVE_DATE TIMESTAMP(8)
)
CREATE TABLE TMP_AIRPORT
(
AIRPORTID VARCHAR2(4),
CITY_NAME VARCHAR2(20)
)
Комментарии:
1. Сделайте это за 2 прохода.
2. Вы можете обнаружить
MERGE
, что команда более эффективна.3. инструкции insert кажутся немного искаженными. Я имею в виду, почему порядок столбцов не совпадает.
Ответ №1:
вы можете добиться этого следующим образом:
INSERT INTO airport_dim
select airportkey_Seq.nextval
, AIRPORTID
, CASE WHEN ad.AIRPORT_KEY is null then CITY_NAME else null end
, CASE WHEN ad.AIRPORT_KEY is null then null else CITY_NAME end
, CASE WHEN ad.AIRPORT_KEY is null then null CITY_NAME sysdate end
from TMP_airport ta
LEFT JOIN AIRPORT_DIM ad
ON ta.AIRPORTID = ad.AIRPORT_CODE