繁体   English   中英

比较Oracle存储过程中IF语句中的两列

[英]Comparing two columns in an IF statement in a stored procedure in Oracle

我在SQL Developer中有两个不同的表TB_TempTB_Main 我只想比较这些表中的两列,例如。 我想比较user_idtb_tempuser_paymenttb_main

这两个表都是从Excel文件导入的。 如果存在匹配项,例如,我希望它使用dbms_output日志记录仅输出调试。

到目前为止,我有; 它的比较部分让我难以接受IF语句! 这两个表包含将不断用新信息上载的值,因此我要了解的是我实际上无法声明存储在表中的值,因为如果有意义的话,它们将一直在变化? 我只需要知道列是否匹配,就需要输出!

create PROCEDURE PR_TEST AS

user_payment number;

CURSOR c is
SELECT user_payment 
FROM tb_main;

CURSOR tmp is

SELECT * 
FROM tb_temp
WHERE user_ref is null or user_ref = user_payment

cTemp%ROWTYPE

BEGIN

--loop through cursor---

 cTemp_COUNT:=0;

 FOR I IN cTemp LOOP

 end loop

基于SET的解决方案应该为您工作。

SELECT t.* 
FROM tb_temp t INNER JOIN tb_main m on 
WHERE t.user_ref = m.user_payment
UNION
SELECT * FROM tb_temp WHERE user_ref IS NULL

您知道输出的联接和ref_Cursors吗? 另请注意:在播放导入的数据时,您可能会有非显示字符,例如空格。 因此,如果user_Payment为'123'并且用户ID为'123',将找不到匹配项。

显示两个表中user_payment与user_ID匹配的所有详细信息

SELECT * 
FROM tb_Main M
INNER JOIN tb_temp T
 on M.user_payment = T.User_ID

显示两个表中的所有记录,并且当存在匹配项时,如果发生多个匹配项,则显示彼此对齐(在同一行上)的记录,将产生多行。

SELECT * 
FROM tb_Main M
FULL OUTER JOIN tb_temp T
 on M.user_payment = T.User_ID

显示来自tb_main的所有记录,仅显示与tb_temp匹配的详细信息

SELECT * 
FROM tb_Main M
LEFT JOIN tb_temp T
 on M.user_payment = T.User_ID

显示来自tb_temp的所有记录,仅显示与tb_main匹配的详细信息

SELECT * 
FROM tb_Main M
RIGHT JOIN tb_temp T
 on M.user_payment = T.User_ID

暂无
暂无

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

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