2017-03-21 1 views
0

orderstatus가 'ordered'인 고객 레코드를 찾아야합니다. 동적 쿼리를 사용하여이를 어떻게 수행합니까? 다음 코드 스 니펫에서 오류가 발생합니다.동적 쿼리에서 can-find를 사용하면 오류가 발생합니다

DEFINE VARIABLE qry AS HANDLE. 
CREATE QUERY qry. 
qry:SET-BUFFERS(BUFFER customer:HANDLE, BUFFER order:HANDLE). 
qry:QUERY-PREPARE("for each customer where customer.country eq 'USA' and 
        can-find(order where order.custnum = customer.custnum 
            and order.orderstatus eq 'ordered')"). 
qry:QUERY-OPEN(). 

REPEAT : 
    qry:GET-NEXT(). 
    IF qry:QUERY-OFF-END THEN LEAVE. 
    DISP customer.custnum customer.name customer.salesrep. 
END. 
qry:QUERY-CLOSE(). 
DELETE OBJECT qry. 

또는 이에 대한 해결 방법이 있습니까?

답변

2

CAN-FIND으로 고민하지 마십시오 (어쨌든해서는 안 됨). 대신에 두 테이블을 결합하십시오.

DEFINE TEMP-TABLE customer NO-UNDO 
    FIELD custnum AS INTEGER 
    FIELD country AS CHARACTER 
    FIELD NAME AS CHARACTER 
    FIELD salesrep AS CHARACTER. 

DEFINE TEMP-TABLE order NO-UNDO 
    FIELD custnum AS INTEGER 
    FIELD orderstatus AS CHARACTER. 

CREATE customer. 
ASSIGN customer.custnum = 1 
     customer.country = "usa" 
     customer.NAME  = "Name1" 
     customer.salesrep = "jaan". 

CREATE customer. 
ASSIGN customer.custnum = 2 
     customer.country = "usa" 
     customer.NAME  = "Name2" 
     customer.salesrep = "martin". 

CREATE customer. 
ASSIGN customer.custnum = 3 
     customer.country = "sweden" 
     customer.NAME  = "Name3" 
     customer.salesrep = "john". 

CREATE order. 
ASSIGN order.custnum  = 1 
     order.orderstatus = "cancelled". 

CREATE order. 
ASSIGN order.custnum  = 2 
     order.orderstatus = "ordered". 


CREATE order. 
ASSIGN order.custnum  = 3 
     order.orderstatus = "ordered". 


DEFINE VARIABLE qry AS HANDLE. 
CREATE QUERY qry. 
qry:SET-BUFFERS(BUFFER customer:HANDLE, BUFFER order:HANDLE). 
qry:QUERY-PREPARE("for each customer where customer.country eq 'USA', FIRST order where order.custnum = customer.custnum and order.orderstatus eq 'ordered'"). 
qry:QUERY-OPEN(). 

REPEAT : 
    qry:GET-NEXT(). 
    IF qry:QUERY-OFF-END THEN LEAVE. 
    DISP customer.custnum customer.name customer.salesrep. 
END. 
qry:QUERY-CLOSE(). 
DELETE OBJECT qry. 
+0

덕분에이 나를 ​​위해 작동합니다

여기에 임시 테이블에서 일부 mockdata과 예입니다. 그러나 나는 여기서 한 가지를 이해하지 못했습니다. 어떻게/왜 그것이 미국이 누구의 고객 기록을 가져 오지 않는지. – Mahesh

+0

질의 때문에 : 그것은 주문 된 주문을 가진 미국 출신의 것만 반환합니다. – Jensd

관련 문제