Edit `TABLE-HANDLER` to point to another temp-table

181 Views Asked by At

I'm trying to overwrite the parameter handler, so it'd point to another temp-table with different schema.

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".

The TH_NewTable points to a random parameter TEMP-TABLE with different schema and contents. I want to overwrite this parameter TABLE-HANDLER with the TT_RealTable. If I try to set:

TH_NewTable = TEMP-TABLE TT_RealTable:HANDLE.

The program will crash at runtime saying that TT_RealTable's schema/meta data doesn't match the handler's one.

How I can overwrite the handler to point to my TT_RealTable:HANDLE, and return it as output?

1

There are 1 best solutions below

2
On BEST ANSWER

If the schema IS different as the error claims, and you said at the beginning of your post, what you want to do can't be done. You can't pass a temp-table buffer handle that has a certain definition and return something else at the end of the procedure, assuming the parameter table handle is from a static temp-table. Even if it isn't, you'd need to create the temp-table using the buffer handle AFTER calling the procedure, which I'm thinking is not what you want, since your parameter is input-output.

If you really want to work with a table that's fluid as far as schema goes, you should read into dynamic temp-tables. Look for the CREATE TEMP-TABLE statement in help and read through the examples to understand how you can get a handle and then (and only then) build a temp-table using the returned handle, so you can use that. You lose the ability of using regular statements, though, such as create and assign. You'll have to reference BUFFER-FIELD and BUFFER-VALUE, and use the CREATE method instead, using the buffer-handle. Might take a while to get used to it, but it's not rocket science.

Hope it helps!