在存储过程,Oracle中,MINUS操作无法正常工作

时间:2014-01-21 08:59:48

标签: 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;
 /

尝试MINUS操作

SELECT * FROM AR_TABLEB
MINUS
SELECT * FROM ar_tableA ;

输出:

NAME              AGE ADDRESS
---------- ---------- --------------------
Name1              22 Address1
Name2              23 Address2
Name3              24 Address3
Name4              25 Address4

但预期结果不应该是“没有选择行”?

这只是一个测试数据,我的原始表足够大。

提前致谢,任何帮助!

1 个答案:

答案 0 :(得分:4)

请试试。

SELECT trim(name),age,trim(address) FROM AR_TABLEB
MINUS
SELECT trim(name),age,trim(address) FROM ar_tableA ;

如果上述查询适合您,那么其中一个表格的列数据类型为CHAR,另一个列具有VARCHAR

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

在比较或合并这些数据类型时,LPAD VARCHAR2列包含空格或TRIM CHAR列。