如何在Oracle数据库中编写具有三个条件的if语句

如何在Oracle数据库中编写具有三个条件的if语句,oracle,stored-procedures,plsql,oracle-sqldeveloper,Oracle,Stored Procedures,Plsql,Oracle Sqldeveloper,我使用Oracle数据库。我不知道如何在存储过程中写入if条件 我有四张桌子 表1:t1 ╔════════════╦═════╗ ║ CustomerID ║ Year║ ╠════════════╬═════╣ ║ ACC20011 ║ 2001║ ║ ACC30122 ║ 2001║ ║ ACC12356 ║ 2002║ ║ EVG12345 ║ 2003║ ║ DAA23445 ║ 2003║ ║ DAA23548 ║ 2003║ ╚════════════╩══

我使用Oracle数据库。我不知道如何在存储过程中写入if条件

我有四张桌子

表1:t1

╔════════════╦═════╗
║ CustomerID ║ Year║
╠════════════╬═════╣
║ ACC20011   ║ 2001║
║ ACC30122   ║ 2001║
║ ACC12356   ║ 2002║
║ EVG12345   ║ 2003║
║ DAA23445   ║ 2003║
║ DAA23548   ║ 2003║
╚════════════╩═════╝
表2:t2

╔════════════╦═════╗
║ CustomerID ║ Year║
╠════════════╬═════╣
║ ACC20011   ║ 2001║
║ ACC30122   ║ 2001║
║ ACC12356   ║ 2002║
║ EVG12345   ║ 2003║
║ DAA23445   ║ 2003║
║ DAA23548   ║ 2003║
╚════════════╩═════╝
表3:t3

╔════════════╦═════╗
║ CustomerID ║ Year║
╠════════════╬═════╣
║ ACC20011   ║ 2001║
║ ACC30122   ║ 2002║
║ ACC00001   ║ 2003║
║ EVG00002   ║ 2003║
║ DAA23048   ║ 2003║
║ DAA23548   ║ 2001║
╚════════════╩═════╝
结果表:t4

╔════════════╦═════╗
║ CustomerID ║ Year║
╠════════════╬═════╣
║ ACC00001   ║ 2003║
║ EVG00002   ║ 2003║
║ DAA23048   ║ 2003║
╚════════════╩═════╝
表t1、t2相同。当输入为“2003”时,应检查t1、t2是否有“2003”,并将t3中“2003”的客户ID复制到t4

我不知道如何给出if条件。这一年应该在所有三个表格中。如果t1、t2、t3中出现“2003”,则更新t4。

查询

insert into t4
select * from t3
where year_nr = 2003
and exists (
    select 1 from t1
    where year_nr = 2003
    )
and exists (
    select 1 from t2
    where year_nr = 2003
    )
select * from t4
| CUSTOMER_ID | YEAR_NR |
|-------------|---------|
|    ACC00001 |    2003 |
|    EVG00002 |    2003 |
|    DAA23048 |    2003 |
查询

insert into t4
select * from t3
where year_nr = 2003
and exists (
    select 1 from t1
    where year_nr = 2003
    )
and exists (
    select 1 from t2
    where year_nr = 2003
    )
select * from t4
| CUSTOMER_ID | YEAR_NR |
|-------------|---------|
|    ACC00001 |    2003 |
|    EVG00002 |    2003 |
|    DAA23048 |    2003 |

insert into t4
select * from t3
where year_nr = 2003
and exists (
    select 1 from t1
    where year_nr = 2003
    )
and exists (
    select 1 from t2
    where year_nr = 2003
    )
select * from t4
| CUSTOMER_ID | YEAR_NR |
|-------------|---------|
|    ACC00001 |    2003 |
|    EVG00002 |    2003 |
|    DAA23048 |    2003 |

那么您是在t3中的行的t4中进行插入/选择(假设您不想与现有数据合并),其中提供的年份存在于其他两个表中?即:

insert into t4 (CustomerId, Year)
select CustomerId, Year
from t3 
where Year = :year
and exists (select 1 from t2 where Year = :year)
and exists (select 1 from t1 where Year = :year)

当然,如果你被一个小问题困住了,你现在一定有一个不完整的程序。你能发布一下吗?有没有类似的解决方案,而不是在运行时使用where-exists检查。如何在满足条件的情况下编写if语句insert else do nothing。