
[英]Encountered the symbol when expecting one of the following: if in Pl/SQL function
[英]Is there a way to the following with one update in PL/SQL?
这是我们现在在表 (CNTRCT_NTFYUSER) 中的内容:
CNTRCT_ID | 版本_NBR | NOTIFY_TYPE | OPRID |
---|---|---|---|
456 | 1个 | 一种 | 现有用户2 |
789 | 1个 | 一种 | 现有用户3 |
123 | 2个 | 一种 | 现有用户1 |
我们需要为 NOTIFY_TYPE 为“E”和“R”的所有 CNTRCT_ID 插入一些额外的行。
CNTRCT_ID | 版本_NBR | NOTIFY_TYPE | OPRID |
---|---|---|---|
456 | 1个 | 一种 | 现有用户2 |
456 | 1个 | 乙 | 现有用户2 |
456 | 1个 | R | 现有用户2 |
456 | 1个 | 乙 | 新用户1 |
456 | 1个 | R | 新用户1 |
456 | 1个 | 乙 | 新用户2 |
456 | 1个 | R | 新用户2 |
789 | 1个 | 一种 | 现有用户3 |
789 | 1个 | 乙 | 现有用户3 |
789 | 1个 | R | 现有用户3 |
789 | 1个 | 乙 | 新用户1 |
789 | 1个 | R | 新用户1 |
789 | 1个 | 乙 | 新用户2 |
789 | 1个 | R | 新用户2 |
123 | 2个 | 一种 | 现有用户1 |
123 | 2个 | 乙 | 现有用户1 |
123 | 2个 | R | 现有用户1 |
123 | 2个 | 乙 | 新用户1 |
123 | 2个 | R | 新用户1 |
123 | 2个 | 乙 | 新用户2 |
123 | 2个 | R | 新用户2 |
您可以生成:
CROSS JOIN
CROSS JOIN
操作,新用户2] 因此,在SELECT
语句之前使用INSERT
语句。
INSERT INTO CNTRCT_NTFYUSER
SELECT CNTRCT_ID, VERSION_NBR, nt.NOTIFY_TYPE, OPRID
FROM CNTRCT_NTFYUSER
CROSS JOIN (SELECT 'E' AS NOTIFY_TYPE FROM DUAL UNION ALL SELECT 'R' FROM DUAL) nt
UNION ALL
SELECT CNTRCT_ID, VERSION_NBR, nt.NOTIFY_TYPE, oid.OPRID
FROM CNTRCT_NTFYUSER
CROSS JOIN (SELECT 'E' AS NOTIFY_TYPE FROM DUAL UNION ALL SELECT 'R' FROM DUAL) nt
CROSS JOIN (SELECT 'NewUser1' AS OPRID FROM DUAL UNION ALL SELECT 'NewUser2' FROM DUAL) oid;
在此处查看 Oracle 演示。
试试这个 INSERT 语句:
INSERT INTO CNTRCT_NTFYUSER
Select c1.CNTRCT_ID, c1.VERSION_NBR, x.NOTIFY_TYPE, x.OPRID
From CNTRCT_NTFYUSER c1
Inner Join ( SELECT er.NOTIFY_TYPE, usr.OPRID
FROM ( (Select 'E' "NOTIFY_TYPE" From Dual UNION ALL Select 'R' "NOTIFY_TYPE" From Dual) er
Inner Join (Select 'NewUser1' "OPRID" From Dual UNION ALL Select 'NewUser2' From Dual) usr ON(1 = 1)
)
) x ON(1 = 1)
The Inner 加入查询结果的地方
SELECT er.NOTIFY_TYPE, usr.OPRID
FROM ( (Select 'E' "NOTIFY_TYPE" From Dual UNION ALL Select 'R' "NOTIFY_TYPE" From Dual) er
Inner Join (Select 'NewUser1' "OPRID" From Dual UNION ALL Select 'NewUser2' From Dual) usr ON(1 = 1)
)
NOTIFY_TYPE OPRID
----------- --------
E NewUser1
E NewUser2
R NewUser1
R NewUser2
...包含新类型和新用户。
因此,使用您的初始数据如下:
Select * From CNTRCT_NTFYUSER ORDER BY CNTRCT_ID, VERSION_NBR, NOTIFY_TYPE
CNTRCT_ID VERSION_NBR NOTIFY_TYPE OPRID
---------- ----------- ------------------------------ ------------------------------
123 2 A ExistingUser1
456 1 A ExistingUser2
789 1 A ExistingUser3
...结果将是:
Select * From CNTRCT_NTFYUSER ORDER BY CNTRCT_ID, VERSION_NBR, NOTIFY_TYPE
CNTRCT_ID VERSION_NBR NOTIFY_TYPE OPRID
---------- ----------- ------------------------------ ------------------------------
123 2 A ExistingUser1
123 2 E NewUser1
123 2 E NewUser2
123 2 R NewUser1
123 2 R NewUser2
456 1 A ExistingUser2
456 1 E NewUser1
456 1 E NewUser2
456 1 R NewUser1
456 1 R NewUser2
789 1 A ExistingUser3
789 1 E NewUser2
789 1 E NewUser1
789 1 R NewUser1
789 1 R NewUser2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.