Oracle 存储过程中的 MINUS 操作未按预期工作

4 oracle plsql

我有 Oracle 存储过程,它根据一些操作验证两个表之间的数据。自从最近的更改以来,该程序一直工作错误。(添加了新列)不确定原因是什么。尝试随机分析数据,我们确信任何列中都没有特殊字符。

我复制了表的规格并重新创建了场景。

插入数据

 BEGIN
 FOR I IN 1..4 LOOP
  INSERT INTO AR_TABLEA VALUES('Name'||I,21+I,'Address'||I);
  INSERT INTO AR_TABLEB VALUES('Name'||I,21+I,'Address'||I);
end loop;
 END;
 /
Run Code Online (Sandbox Code Playgroud)

尝试减操作

SELECT * FROM AR_TABLEB
MINUS
SELECT * FROM ar_tableA ;
Run Code Online (Sandbox Code Playgroud)

输出:

NAME              AGE ADDRESS
---------- ---------- --------------------
Name1              22 Address1
Name2              23 Address2
Name3              24 Address3
Name4              25 Address4
Run Code Online (Sandbox Code Playgroud)

但预期结果不应该是“未选择任何行”?

这只是测试数据,我原来的表已经足够大了。

预先感谢您的帮助!

Mah*_*kar 5

请尝试这个。

SELECT trim(name),age,trim(address) FROM AR_TABLEB
MINUS
SELECT trim(name),age,trim(address) FROM ar_tableA ;
Run Code Online (Sandbox Code Playgroud)

如果上述查询对您有用,则其中一个表具有具有数据类型的列CHAR,而另一个表具有相同的列VARCHAR

请注意,CHAR数据类型始终保存其最大可能大小的内容。假设您将其声明为CHAR(10)并在其中保存一个字符'A',则它会保存为 'A '(附加空格)。

因此,要么是带有空格的列,要么LPAD是比较或合并这些数据类型时的列。VARCHAR2TRIMCHAR