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

时间:2017-08-15 13:09:38

标签: sql oracle if-statement stored-procedures

我在SQL Developer中有两个不同的表,TB_TempTB_Main。我想比较这些表中的两列,例如。我想比较user_id中的tb_temp列和user_payment中的tb_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

2 个答案:

答案 0 :(得分:0)

基于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

答案 1 :(得分:0)

你知道你的输出有什么连接和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