我需要查找其订单状态为“已订购”的客户记录。如何使用动态查询完成此操作?以下代码段引发错误:
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.
或者有没有解决方法呢?
答案 0 :(得分:2)
不要为CAN-FIND
而烦恼(你不应该这样做)。改为加入两个表。
这是一个在temp-tables中有一些mockdata的例子:
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.