【问题标题】:What does this SQL statement do in this Informix 4GL code?这个 SQL 语句在这个 Informix 4GL 代码中做了什么?
【发布时间】:2012-08-30 20:53:13
【问题描述】:

我错过了一些东西。请问有人能告诉我这是如何工作的吗?

 let rpt.chgkey = null
  select cuschage.chgkey from cuschage where cuschage.cuschnum in
     (select shtwrd_no from crbookid where  
         crbookid.book_no = rpt.book_no and crbookid.line_no <= 3)

    let scratch = rpt.chgkey
    call make_charge_section(scratch) returning rpt.chgkey
 if rpt.chgkey is not null then
    print
    column 1, ESC, "(s0p12h0s3b4099T", ESC, "&a0.5R"
    print
    column 70, rpt.chgkey using "<<<<<<<<<"
end if

【问题讨论】:

    标签: informix 4gl


    【解决方案1】:

    嗯……那 SELECT 语句几乎毫无意义。您通常*执行一个 SELECT 语句将数据放入变量中,但没有 INTO 子句可将返回值放入。

    鉴于 SELECT 对 rpt.chgkey 不执行任何操作,scratch 中的值是 NULL。用这个值(NULL)调用函数make_charge_section,结果保存在rpt.chgkey; CALL 相当于:

    LET rpt.chgkey = make_charge_section(scratch)
    

    或者您可以不使用临时变量并编写:

    LET rpt.chgkey = make_charge_section(rpt.chgkey)
    

    (您也可以使用 CALL 符号来做到这一点)。

    之后,您会在终端上显示一些奇怪的控制序列——我不会尝试找出哪个终端或它的作用;你确定你不能用I4GL本身达到同样的效果吗?然后显示rpt.chgkey 的新(非空)值。

    所以,这里最大的未知数是“为什么在没有 INTO 子句的情况下编写 SELECT 语句”,以及“make_charge_section() 在将 NULL 值作为输入时会做什么?


    * 没有 INTO 的 SELECT 的“异常”使用取决于您检测到 SQL 中的错误。具体如何发生取决于您将 WHENEVER ERROR 设置设置为什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多