编辑`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方法,而不是使用缓冲区句柄。可能需要一段时间才能适应它,但这不是火箭科学。
希望它有帮助!
我也尝试过'TH_NewTable:HANDLE:CREATE-LIKE(TEMP-TABLE TT_RealTable:CREATE)',如果它像'CREATE TEMP-TABLE'。没有成功。 – W0lfw00ds
我放弃了使用INPUT-OUTPUT,并简单地将它分为'INPUT TABLE-HANDLE'和'OUTPUT TABLE'。输出总是已知的,但输入可以是不包含数据或行的“空表”。我尝试覆盖作为处理程序传递的空表,并将填充的表返回为“OUTPUT”。 – W0lfw00ds