这个SQL语句在这个Informix 4GL代码中做了什么?

时间:2012-08-30 20:53:13

标签: informix 4gl

我错过了什么。请有人能告诉我这是如何运作的吗?

 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

1 个答案:

答案 0 :(得分:2)

嗯...... SELECT语句接近毫无意义。您通常 * 执行SELECT语句以将数据转换为变量,但没有INTO子句将返回的值放入。

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

LET rpt.chgkey = make_charge_section(scratch)

或者你可以没有scratch变量并写:

LET rpt.chgkey = make_charge_section(rpt.chgkey)

(您也可以使用CALL表示法执行此操作。)

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

所以,这里的大未知数是'为什么没有INTO子句写的SELECT语句',以及'当给出NULL值作为输入时make_charge_section()做什么?


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