首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获informix中的错误

捕获informix中的错误
EN

Stack Overflow用户
提问于 2011-07-29 10:21:53
回答 3查看 778关注 0票数 1

此程序使用的是Informix4GL。其目的是删除该报告。实际上,它工作得很好,但问题是只有特定的用户可以删除报告的物理文件,这意味着管理员。其他用户可以删除数据库中的报表,但不能删除物理路径。所以我需要捕获语法命令rm -f中的错误。我尝试使用WHENEVER,但它不能捕获它。有人知道怎么做吗?以下是删除报表的代码:

代码语言:javascript
复制
 DELETE FROM sysrpt   
 WHERE srpt_seq_no   = p_sysrpt.srpt_seq_no        
 LET sel_rpt_id = ""    
 LET sel_rpt_id = p_sysrpt.srpt_pgm_id CLIPPED, ".", 
                  p_sysrpt.srpt_seq_no USING "<<<<<<"  
 LET sel_rpt_id = sel_rpt_id CLIPPED      
 LET prt_comand = "\\rm -f ", rpt_path CLIPPED, sel_rpt_id CLIPPED
 LET prt_comand = prt_comand CLIPPED                              
 RUN prt_comand                                                   
EN

回答 3

Stack Overflow用户

发布于 2011-07-29 22:39:56

我认为除非您将stdout/stderr作为rm命令的一部分重定向到另一个文件,否则您将无法捕获完整的错误消息。通过使用RUN语句的RETURNING子句,您可以将外壳命令的返回代码返回到4gl程序中,例如,您可以在"RUN prt_command“之后添加以下内容:

代码语言:javascript
复制
RUN prt_comand RETURNING p_return_code

从内存中,我相信你需要MOD 256的返回码。

票数 1
EN

Stack Overflow用户

发布于 2011-08-05 05:51:33

这听起来像是典型的X-Y problem,其中真正的问题是最初生成的报告的访问权限。

也许报表文件在生成后应该是chmod-ed,以允许其他人删除它,或者应用程序用户应该具有正确设置的umask

票数 1
EN

Stack Overflow用户

发布于 2011-08-04 06:15:07

请注意,即使无法删除文件或文件不存在,rm -f也会返回成功。如果希望rm返回错误,就不能告诉它不要返回错误。

否则,建议使用:

代码语言:javascript
复制
RUN prt_command RETURNING p_retcode

是正确的。如果p_retcode的值不为零,则该命令以某种方式失败。

下面复制的这行是多余的:

代码语言:javascript
复制
LET prt_comand = prt_comand CLIPPED

如果prt_command是CHAR变量,则存储的结果将再次填充空白(所有CHAR变量都存储为填充完整长度)。如果prt_command是一个VARCHR变量,则带有裁剪的前一个赋值已删除尾随空格。

我不清楚为什么要在rm命令前使用反斜杠。你在避免使用别名吗?如果是这样的话,是时候去掉rm的别名了;从长远来看,它是致命的。学习如何正确使用raw命令。如果你在没有别名的情况下访问一台机器,你将得不到保护,并且你会滥用命令,而没有别名声称能提供的任何安全网络。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6868015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档