【问题标题】:Translate Perl Script to T-SQL将 Perl 脚本翻译成 T-SQL
【发布时间】:2016-11-13 03:12:30
【问题描述】:

好的 - 我需要 Perl Guru 的帮助。一位同事向我提供了他们支持的 Perl 应用程序的代码,以及它在将数据写入 Oracle 之前如何对值进行编码。不要问我为什么要进行这种编码(似乎是针对特殊字符的)。这些值正在写入 Oracle 中的 CLOB。我需要在 SQL Server 的 SSIS 包中使用等效解码。

基本上,我正在使用 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;
    }

【问题讨论】:

  • 信息太多,归结为小样本输入、来自同一输入的所需输出、当前代码、当前输出/错误消息以及关于您感到困惑的最小 cmets。祝你好运。
  • 请注意帖子底部的标签。您在创建问题时设置它们(如果您不花时间查看,网站会“猜测”并包括不相关的问题)。您有“oracle”,我将继续删除它,但当您发布问题时,这是您的工作!

标签: sql perl tsql ssis


【解决方案1】:

encodeValue 子例程是一种简单的 URL 编码算法,具有将单引号和双引号转换为等效 HTML 实体的附加步骤。您需要编写 Transact-SQL 代码以反向顺序解码这些步骤,因此必须做的第一件事是将所有 %7f-type 序列替换为其等效字符

您应该查看URL Decode in T-SQL 以获取执行此操作的代码。它支持完整的 UTF-8 字符集。如果您愿意,您可以删除所有 ELSE IF @Byte1Value 块以仅支持 7 位 ASCII,但它对您来说可以正常工作

可以使用REPLACE 调用来撤消单引号和双引号以及空格的剩余转换,我相信您不需要帮助。原来的decodeValue 子例程只恢复双引号和空格,将单引号保留为',所以我不知道您是否想复制这种行为

【讨论】:

    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2014-04-25
    • 2013-07-24
    相关资源
    最近更新 更多