2012-08-30 3 views
1

나는 뭔가를 놓치고 있습니다. 누군가가 어떻게 작동하는지 말해 줄 수 있습니까?이 SQL 문은이 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 

답변

2

흠 ... 그 SELECT 문은 무의미합니다. 일반적으로 *은 SELECT 문을 실행하여 변수에 데이터를 가져 오지만 반환 값을 넣을 INTO 절이 없습니다.

rpt.chgkey과 함께 SELECT가 수행되지 않는다면 scratch의 값은 NULL입니다. 함수 make_charge_section이이 값 (NULL)과 함께 호출되고 결과는 rpt.chgkey에 저장됩니다.

LET rpt.chgkey = make_charge_section(rpt.chgkey) 

을 (당신이 그 CALL 표기법도 할 수 있습니다) 다음 CALL은 동일합니다 :

LET rpt.chgkey = make_charge_section(scratch) 

하거나 스크래치 변수없이 할 쓸 수 있습니다.

그런 다음, 이상한 제어 시퀀스를 터미널에 표시합니다. 어떤 터미널이나 무엇을하는지 알아 내려고하지는 않을 것입니다. I4GL 자체에서 동일한 효과를 얻을 수 없습니까? 그런 다음 rpt.chgkey의 새 (null이 아닌) 값을 표시합니다.

그래서 'INTO 절없이 SELECT 문이 쓰여진 이유는 무엇입니까'및 'NULL 값을 입력으로받을 때 make_charge_section()은 무엇을합니까?'라는 큰 불확실성이 있습니다.


* '이상은'당신은 SQL의 오류를 감지에 따라 달라 INTO없이 SELECT의 사용합니다. 어떻게 발생합니까 WHENEVER ERROR 설정이로 설정되어 있는지에 따라 다릅니다.