我有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
但预期结果不应该是“没有选择行”?
这只是一个测试数据,我的原始表足够大。
提前致谢,任何帮助!
答案 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
列。