2012-09-03 66 views
1

我遇到了以下令人困惑的問題:DB奇怪的行爲

一個數據庫表通過CSV文件更新和一些KSH腳本:

#!/bin/ksh 

moduleDir=$ACS_INSTALL/FMC_TER_AM_028/Database 
logFile=$moduleDir/install_scripts/`basename $0`_$(date '+%Y%m%d_%H%M').log 

(
    cp -ri $moduleDir/ntscripts/datafiles/* $PROVHOME/database/ntscripts/datafiles 
    echo "\n***********************" 
    echo "* New/Modified files: *" 
    echo "***********************" 
    find $moduleDir/ntscripts/datafiles -type f | xargs ls -l 
) 2>&1 | tee $logFile 

echo "\nInstallation of Database completed\n" 

更新等於(下等於我的意思視覺效果與下面的INSERT命令相同)至以下INSERT查詢:

INSERT INTO tp_nt_mapping (TARIFF_PLAN, SERVICE_TYPE, NETWORK_TEMPLATE, IN_CREATE, IN_DELETE) 
VALUES (171, 'Postpaid', '11', '', '') 

當我使用以下選擇命令:

SELECT * FROM tp_nt_mapping ORDER BY tariff_plan DESC 

我能看到新插入的記錄,但是當我嘗試使用以下任意的選擇查詢,我'不是:

SELECT * FROM tp_nt_mapping WHERE network_template = 11 ORDER BY tariff_plan DESC 
SELECT * FROM tp_nt_mapping WHERE network_template = '11' ORDER BY tariff_plan DESC 

有什麼建議嗎?

+0

張貼表定義和一些KSH/sqlplus的相關代碼。 –

+0

可能network_template是char(N)=>左側填充空格。 11變成'11',這與'11'不同。你應該使用Varchar2。 –

+0

你能告訴我們查詢'選擇轉儲(tp_nt_mapping)從tp_nt_mapping ORDER BY tariff_plan DESC'的結果? –

回答

3

network_template該字段的值不只是'11'而是'11' || chr(13)
所以,你必須在最後的carrige return字符。

您可以通過執行修復數據:

update tp_nt_mapping 
set network_template = replace(network_template, chr(13), '') 

但最好檢查一下爲什麼它被放在首要位置添加....

+0

非常感謝!優秀的解釋! – nenito