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

Posted

技术标签:

【中文标题】在 Oracle 存储过程中比较 IF 语句中的两列【英文标题】:Comparing two columns in an IF statement in a stored procedure in Oracle 【发布时间】:2017-08-15 13:09:38 【问题描述】:

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

这两个表都是从 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

【问题讨论】:

在您对@Ghost 的评论中,您说这些字段将是未知的。您的意思是如果任何字段的值与任何其他字段匹配,您是否需要标记?请您编辑您的问题以明确您想要做什么。 @JonathanWillcock 我编辑了我的问题以使其更清楚 值会改变,但是字段名称是否不变,是否只有这两个字段(user_payment和user_ref)需要比较? @JonathanWillcock User_payment (tb_main) 和 User_ref(tb_temp) 保持不变,需要在可能匹配的情况下进行比较是的! 您所追求的结果集是什么?来自这两个匹配项的所有记录:来自 tb_main 的所有记录和来自 tb_temp 的相关信息?你知道什么是join吗?blog.codinghorror.com/a-visual-explanation-of-sql-joins 【参考方案1】:

您知道输出的连接和 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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 Oracle 存储过程中比较 IF 语句中的两列的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程 在循环裏面,怎麽写2个IF语句?不是IF...ELSE IF 哦 因为2个代码块都要判断

oracle存储过程中写IF ELES

oracle 存储过程中 如果用if语句判断一条查询语句的结果集是不是为空

oracle中的存储过程,有啥作用,以及怎么在代码中使用?

oracle的存储过程

oracle 存储过程里的if else