1

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

 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
4

1 回答 1

2

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

鉴于 SELECT 与 无关rpt.chgkey,因此 in 的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 设置设置为什么。

于 2012-08-31T02:08:20.920 回答