简体   繁体   English

如何编写一个 PL/SQL 代码,在插入之前检查 table_name.column 名称中是否存在值?

[英]How do I write a PL/SQL code that checks if a value exists in table_name.column name before inserting into it?

insert into AIRPORT_DIM
select airportkey_Seq.nextval, AIRPORTID , CITY_NAME,NULL, NULL 
from TMP_AIRPORT;

how do I turn the above insert SQL code into a pl/sql code that checks if the AIRPORTID of the newly inserted row already exists with different city_name in the airport_dim table?如何将上述插入 SQL 代码转换为 pl/sql 代码,以检查新插入行的 AIRPORTID 是否已在 airport_dim 表中以不同的 city_name 存在?

if exists them then do如果存在,那么做

insert into AIRPORT_DIM 
select airportkey_Seq.nextval, AIRPORTID ,NULL,CITY_NAME, sysdate
from TMP_airport;

else别的

insert into airport_dim 
select airportkey_Seq.nextval, AIRPORTID , CITY_NAME,NULL, NULL
from TMP_airport;

The following are the AIRPORT_DIM and TMP_airport tables.以下是 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)
)

you can achieve that as follow:您可以按以下方式实现:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM