W0lfw00ds
W0lfw00ds

Reputation: 2096

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

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?

Upvotes: 0

Views: 204

Answers (1)

bupereira
bupereira

Reputation: 1498

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!

Upvotes: 1

Related Questions