【问题标题】:How can I escape a Linux string in Oracle Forms 10g varchar2 variable如何在 Oracle Forms 10g varchar2 变量中转义 Linux 字符串
【发布时间】:2019-12-26 19:50:20
【问题描述】:

如果我无法清楚地表达我的问题,请原谅我。

我正在尝试从 Oracle Forms 10g 过程执行以下 Linux 命令:

ls -lact --full-time /etc |awk 'END {print $6,$7,$8}'

在程序中,我有以下内容:

command := ' ls -lact --full-time /etc |awk \'\END {print $6,$7,$8}  ';

当然,变量command 是事先声明的。

我得到的错误是这样的:

在预期以下之一时遇到符号“\”

如果您能帮助我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: oracle plsql oracle10g oracleforms


    【解决方案1】:

    您可以通过将字符串值中的单引号加倍来转义它们:

    command := 'ls -lact --full-time /etc |awk ''END {print $6,$7,$8}''';
    

    或者更简洁一点,因为您不必修改原始文本(假设 Forms 支持这个!?)使用the alternative quoting mechanism

    command := q'[ls -lact --full-time /etc |awk 'END {print $6,$7,$8}']';
    

    这里我使用[] 作为分隔符,但它们可以是实际字符串中没有出现的任何字符:

    如果开头 quote_delimiter[{<( 之一,则结尾 quote_delimiter 必须是对应的 @ 987654330@、}>)。在所有其他情况下,开始和结束 quote_delimiter 必须是相同的字符。

    【讨论】:

    • 谢谢。虽然这两种解决方案都非常优雅,但遗憾的是我无法让它们中的任何一个起作用。虽然没有产生编译错误,但表单在运行时报告了错误。
    • 是否与字符串设置有关的错误;或者从那时起尝试执行命令-我不知道您是如何尝试执行此操作的(也许是via Java?),还是从处理ls 输出?除非它是关于设置command,否则它可能需要作为一个新问题被问到,但对错误实际上是什么感到好奇..
    • 我有一种感觉,字符串设置不应该受到责备。可能是命令输出以及如何在 Oracle Forms 10g 中处理它的问题。以下是我使用的代码 sn-p:command := 'ls -lact --full-time'; process := WEBUTIL_HOST.Blocking(command); stnd := WEBUTIL_HOST.Get_Standard_Output(process); If stnd.count > 0 Then For i in stnd.first .. stnd.last Loop result:= stnd(i); End loop ; strOSInstallDate := trim(result); :CTRL.TEXT_INSTALL_DATE := trim(strOSInstallDate); End if ;
    • 就像我说的,如果问题是设置这个问题的命令字符串,那么你需要提出一个新问题,包括你得到的错误,可能还有你得到的输出手动运行ls(尽管您在此处使用的命令不同)。我猜该表单正试图将 TEXT_INSTALL_DATE 转换为日期,但它不包含您所期望的,但您需要在一个新问题中充实问题以获得合理的答案。
    • 还没有完全转换为日期。所涉及的问题是获取操作系统创建第一个文件的第一个日期。因为那是操作系统的安装日期,所以我的目标是从ls 命令的输出中获取列。因为,我必须把事情赶进生产环境(考虑到我是 Oracle Forms 10g 的新手),我在之前的评论中使用代码 sn-p 解决了这个问题。非常感谢您帮助我解决问题。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多