在 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_Temp
和 TB_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个代码块都要判断