我有 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)
但预期结果不应该是“未选择任何行”?
这只是测试数据,我原来的表已经足够大了。
预先感谢您的帮助!
请尝试这个。
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