2016-11-13 50 views
-2

好的 - 我需要來自Perl Guru的幫助。一位同事向我提供了他們支持的Perl應用程序的代碼,以及它在將數據寫入Oracle之前對值進行編碼的方式。不要問我爲什麼他們這樣編碼(似乎是特殊字符)。這些值正在寫入Oracle中的CLOB。我需要一個等效的解碼器用於SQL Server中的SSIS包。將Perl腳本翻譯成T-SQL

基本上我正在使用SSIS包從Oracle數據庫讀取數據,並且需要對這些值進行解碼。單詞之間的「+」符號很容易替換聲明(不確定這是最好的方式,但似乎到目前爲止工作)。因爲我的Perl腳本技能是有限的(是的,我已經做了一些閱讀,但並不像我想的那麼容易,因爲我不太瞭解Perl)。我只對解碼未編碼的字符串感興趣。

順便說一句,我知道%29等於一個「)」符號。看起來正在使用正則表達式,但我不太熟練使用這個(我知道我需要學習它)。

sub decodeValue($) 
    { 
     my $varRef = shift; 

     ${$varRef} =~ tr/+/ /; 
     ${$varRef} =~ s/%([a-fA-F0-9]{2})/pack("C",hex($1))/eg; 
     ${$varRef} =~ tr/\cM//; 
     ${$varRef} =~ s/"/\"/g; 
     return; 
    } 


sub encodeValue($) 
    { 
     my $varRef = shift; 

     # ${$varRef} =~ tr/ /+/; 
     ${$varRef} =~ s/"/\"/g; 
     ${$varRef} =~ s/'/\'/g; 
     ${$varRef} =~ s/(\W)/sprintf("%%%x", ord($1))/eg; 
     return; 
    } 
+0

太多的信息,把它歸結爲小樣本輸入,需要的輸出從相同的輸入,當前代碼,當前輸出/錯誤信息和關於你困惑的地方的最小評論。祝你好運。 – shellter

+0

請注意帖子底部的標籤。您在創建問題時設置它們(如果您不花時間查看,則網站「猜測」幷包含不相關的網站)。你有「甲骨文」,我會繼續和刪除,但這是你的工作,當你發佈一個問題! – mathguy

回答

2

encodeValue子程序是一個簡單的URL編碼算法,採取的額外步驟單引號和雙引號轉換爲等效的HTML實體。您需要編寫Transact-SQL代碼以相反的順序對這些步驟進行解碼,因此首先必須做的是用所有%7f類型的序列替換其等效字符

您應該查看URL Decode in T-SQL以獲取代碼。它支持完整的UTF-8字符集。如果您願意,您可以刪除所有ELSE IF @Byte1Value塊以僅支持7位ASCII,但它可以正常工作

可以使用REPLACE調用撤消單引號和雙引號以及空格的其餘轉換,我相信你不需要幫助。原來的decodeValue子程序只能恢復雙引號和空格,而把單引號留作',所以我不知道你是否想要複製那個行爲