编辑`TABLE-HANDLER`指向另一个临时表

问题描述:

我试图覆盖参数处理程序,因此它指向另一个具有不同架构的临时表。编辑`TABLE-HANDLER`指向另一个临时表

myProcedure.p

DEFINE TEMP-TABLE TT_RealTable NO-UNDO 
    BEFORE-TABLE TT_RealTableBefore 
    FIELD name AS CHAR 
. 

DEF INPUT-OUTPUT PARAM TABLE-HANDLE TH_NewTable. 

CREATE TT_RealTable. 
ASSIGN TT_RealTable.name = "Ben". 

CREATE TT_RealTable. 
ASSIGN TT_RealTable.name = "Harry". 

TH_NewTable指向具有不同的模式和内容的一个随机参数TEMP-TABLE。我想用TT_RealTable覆盖此参数TABLE-HANDLER。如果我尝试设置:

TH_NewTable = TEMP-TABLE TT_RealTable:HANDLE. 

程序在运行时崩溃,说TT_RealTable的模式/元数据与处理程序的数据不匹配。

如何覆盖处理程序指向我的TT_RealTable:HANDLE,并将其作为输出返回?

如果模式与错误声明不同,并且您在文章的开头部分提到,则无法完成您想要执行的操作。假设参数表句柄来自静态临时表,则不能传递具有特定定义的临时表缓冲区句柄,并在过程结束时返回其他内容。即使它不是,你需要在调用过程之后使用缓冲区句柄创建临时表,因为你的参数是输入 - 输出,我认为这不是你想要的。

如果你真的想使用一个流畅的表格,那么你应该读入动态临时表。在帮助中查找CREATE TEMP-TABLE语句,并阅读示例以了解如何获取句柄,然后(并且只在此时)使用返回的句柄构建临时表,以便可以使用该句柄。但是,您将失去使用常规语句的能力,例如创建和分配。您必须引用BUFFER-FIELD和BUFFER-VALUE,并使用CREATE方法,而不是使用缓冲区句柄。可能需要一段时间才能适应它,但这不是火箭科学。

希望它有帮助!

+0

我也尝试过'TH_NewTable:HANDLE:CREATE-LIKE(TEMP-TABLE TT_RealTable:CREATE)',如果它像'CREATE TEMP-TABLE'。没有成功。 – W0lfw00ds

+1

我放弃了使用INPUT-OUTPUT,并简单地将它分为'INPUT TABLE-HANDLE'和'OUTPUT TABLE'。输出总是已知的,但输入可以是不包含数据或行的“空表”。我尝试覆盖作为处理程序传递的空表,并将填充的表返回为“OUTPUT”。 – W0lfw00ds