sql - 如何编写一个 PL/SQL 代码,在插入之前检查 table_name.column 名称中是否存在值?
问题描述
insert into AIRPORT_DIM
select airportkey_Seq.nextval, AIRPORTID , CITY_NAME,NULL, NULL
from TMP_AIRPORT;
如何将上述插入 SQL 代码转换为 pl/sql 代码,以检查新插入行的 AIRPORTID 是否已存在且在 airport_dim 表中具有不同的 city_name?
如果存在,那么做
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)
)
解决方案
您可以按以下方式实现:
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
推荐阅读
- r - 基于向量将行从另一个数据帧添加到数据帧
- c# - 未按名称找到 DataTable 中的 DataColumn
- c - 在 virtualbox 上安装 papi(在虚拟机上使用计数器)
- nginx - 如何在 nginx 中匹配包含大于号 (<) 的请求?
- java - log4j:ERROR 执行 sql 失败。mysql 在 appender 中插入的问题
- sql - 获取数据SQL Server中最后一条记录的id
- kotlin - 从反应流处理中删除变量突变
- typeclass - 为什么 'neutral' 没有在 List monoid 中标准化为 '[]'?
- reactjs - React + MaterializeCSS + 动态渲染下拉菜单(故障位置)
- ios - 设置后关闭 ShortcutViewController