同一SQL語句在PLSQL Developer與SQL * PLUS工具中執行結果不一致

背景

今天遇到以下問題,同一sql語句在PLSQL Developer與SQL*PLUS工具中執行結果不一致,sql

sql語句以下數據庫

SELECT 'GROUPHEALTH_SEND_EMAIL' as interface, SUM(decode(se.status, 1, 0, 1)) AS count , 0 AS processed , SUM(decode(se.status, 1, 0, 1)) - 0 AS notprocessed FROM cuan_doic.policy po LEFT JOIN cuan_doic.role ro ON ro.topactualid = po.topactualid AND ro.kind = 'BASICRISKINFOPA' LEFT JOIN cuan_doic.property pr ON pr.parentactualid = ro.actualid AND pr.topactualid = po.topactualid AND pr.kind = 'GROUPTYPE' LEFT JOIN cuan_doic.t_sendemailinfo se ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, '保單號:', 1, 1) + 4, 12) AND se.senderowner = 'UW_WECHAT' WHERE 1 = 1 AND po.productcode = '00130001' AND po.CURRENTFLAG = 'Y' AND pr.value = '$$600062000006' AND po.policyno IS NOT NULL;

在PLSQLDeveloper工具執行結果以下
bash

在SQL*PLUS中執行結果以下
工具

出現這種問題時候,有些老司機會問,是否是鏈接的數據庫不一致,用戶不一致,表的數據是否是一致?編碼

經確認以上都是一致的,只是執行SQL的工具不一致。spa

分析

仔細觀察SQL語句,有以下鏈接條件。

ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, '保單號:', 1, 1) + 4, 12)

這裏有中文字符,是否是這個致使的? 爲證明本身的想法,把中文字符用英文代替。


ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, 'bdh', 1, 1) + 4, 12)

再次執行的結果以下code

  • PLSQLDeveloper工具
    it

  • SQL*PLUS工具
    字符編碼

解決

此SQL執行形成不一樣結果是由於中文字符致使的。class

因此咱們能夠調整SSH工具的字符編碼與設置NLS_LANG參數,經調整以後,SQLPLUS工具也能輸出正確結果。

export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

相關文章
相關標籤/搜索