define temp-table ttTemp no-undo
field ctChar as character
field ctLog as logical
field itInt as integer
index iIdx is primary unique itInt ctChar.
DEFINE VARIABLE hTemp AS HANDLE NO-UNDO.
CREATE TEMP-TABLE hTemp.
/* add fields */
hTemp:ADD-NEW-FIELD('ctChar','CHARACTER').
hTemp:ADD-NEW-FIELD('ltLog','LOGICAL').
hTemp:ADD-NEW-FIELD('itInt','INTEGER').
/* add index */
hTemp:ADD-NEW-INDEX('iIdx',YES,YES).
hTemp:ADD-INDEX-FIELD( 'iIdx','itInt').
hTemp:ADD-INDEX-FIELD( 'iIdx','ctChar').
hTemp:TEMP-TABLE-PREPARE('resultset').
Is it possible to create an index on a temp. table?
I've tried this :-
CREATE INDEX tbl_idx1 ON tbl_temp(tbl_temp_lot).
Am I doing it wrong?
If you need to do this with SQL then I can't help you.
I wasn't even aware that it is possible to define tempory tables with SQL (is it?).
Good day,
Thank you for your reply! However, I failed to inform that im currently using SQL-89 and Progress Version 9.1B...;p
DEFINE TEMP-TABLE Tmp_tbl1
FIELD Tmp_No Like TblA.TblA_No
FIELD Tmp_Dt like TblA.TblA_Dt
FIELD Tmp_Desc like TblA.TblA_Desc
FIELD Tmp_Qty like TblA.TblA_Qty
[I][COLOR=blue]INDEX tmp_idx1 IS PRIMARY UNIQUE Tmp_No.[/COLOR][/I]
FOR EACH TblA NO-LOCK WHERE TblA_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblA_No.
END. /* are you sure? this looks like a mistake... */
FOR EACH TblB NO-LOCK WHERE TblB_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblB_No.
CREATE Tmp_tbl1
IF AVAILABLE TblA THEN
DO:
ASSIGN
Tmp_No = TblA_No
Tmp_Dt = TblA_Dt
Tmp_Desc = TblA_Desc
Tmp_Qty = TblA_Qty
.
END.
IF AVAILABLE TblB THEN
DO:
ASSIGN
Tmp_No = TblB_No
Tmp_Dt = TblB_Dt
Tmp_Desc = TblB_Desc
Tmp_Qty = TblB_Qty
.
END.
END.
Its taking an average of 15 mins to process, but having run the 2 FOR EACH queries takes me lesser than 30 Secs. or am I not using TblA & TblB's indexes correctly?
DEFINE TEMP-TABLE Tmp_tbl1
FIELD Tmp_No Like TblA.TblA_No
FIELD Tmp_Dt like TblA.TblA_Dt
FIELD Tmp_Desc like TblA.TblA_Desc
FIELD Tmp_Qty like TblA.TblA_Qty
[I][COLOR=blue]INDEX tmp_idx1 IS PRIMARY UNIQUE Tmp_No.[/COLOR][/I]
FOR EACH TblA NO-LOCK WHERE TblA_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblA_No.
FOR EACH TblB NO-LOCK WHERE TblB_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblB_No.
CREATE Tmp_tbl1
IF AVAILABLE TblA THEN
DO:
ASSIGN
Tmp_No = TblA_No
Tmp_Dt = TblA_Dt
Tmp_Desc = TblA_Desc
Tmp_Qty = TblA_Qty
.
END.
IF AVAILABLE TblB THEN
DO:
ASSIGN
Tmp_No = TblB_No
Tmp_Dt = TblB_Dt
Tmp_Desc = TblB_Desc
Tmp_Qty = TblB_Qty
.
END.
END.
END.
DEFINE TEMP-TABLE Tmp_tbl1
FIELD Tmp_No Like TblA.TblA_No
FIELD Tmp_Dt like TblA.TblA_Dt
FIELD Tmp_Desc like TblA.TblA_Desc
FIELD Tmp_Qty like TblA.TblA_Qty
[I][COLOR=blue]INDEX tmp_idx1 IS PRIMARY UNIQUE Tmp_No.[/COLOR][/I]
FOR EACH TblA NO-LOCK WHERE TblA_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblA_No.
CREATE Tmp_tbl1
IF AVAILABLE TblA THEN /* not really a need for the if avail... */
DO:
ASSIGN
Tmp_No = TblA_No
Tmp_Dt = TblA_Dt
Tmp_Desc = TblA_Desc
Tmp_Qty = TblA_Qty
.
END.
END.
FOR EACH TblB NO-LOCK WHERE TblB_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblB_No.
CREATE Tmp_tbl1
IF AVAILABLE TblB THEN /* not really a need for the if avail... */
DO:
ASSIGN
Tmp_No = TblB_No
Tmp_Dt = TblB_Dt
Tmp_Desc = TblB_Desc
Tmp_Qty = TblB_Qty
.
END.
END.
DEFINE TEMP-TABLE Tmp_tbl1
FIELD Tmp_No Like TblA.TblA_No
FIELD Tmp_Dt like TblA.TblA_Dt
FIELD Tmp_Desc like TblA.TblA_Desc
FIELD Tmp_Qty like TblA.TblA_Qty
[I][COLOR=blue]INDEX tmp_idx1 IS PRIMARY UNIQUE Tmp_No.[/COLOR][/I]
/* collect TblA data into the temp-table */
FOR EACH TblA NO-LOCK WHERE TblA_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblA_No.
CREATE Tmp_tbl1
ASSIGN
Tmp_No = TblA_No
Tmp_Dt = TblA_Dt
Tmp_Desc = TblA_Desc
Tmp_Qty = TblA_Qty
.
END.
/* collect TblB data into the temp-table */
FOR EACH TblB NO-LOCK WHERE TblB_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblB_No.
CREATE Tmp_tbl1
ASSIGN
Tmp_No = TblB_No
Tmp_Dt = TblB_Dt
Tmp_Desc = TblB_Desc
Tmp_Qty = TblB_Qty
.
END.
DEFINE TEMP-TABLE Tmp_tbl1
FIELD Tmp_Src as character
FIELD Tmp_No Like TblA.TblA_No
FIELD Tmp_Dt like TblA.TblA_Dt
FIELD Tmp_Desc like TblA.TblA_Desc
FIELD Tmp_Qty like TblA.TblA_Qty
[I][COLOR=blue]INDEX tmp_idx1 IS PRIMARY UNIQUE Tmp_Src Tmp_No.[/COLOR][/I]
/* collect TblA data into the temp-table */
FOR EACH TblA NO-LOCK WHERE TblA_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblA_No.
CREATE Tmp_tbl1
ASSIGN
Tmp_Src = "TblA"
Tmp_No = TblA_No
Tmp_Dt = TblA_Dt
Tmp_Desc = TblA_Desc
Tmp_Qty = TblA_Qty
.
END.
/* collect TblB data into the temp-table */
FOR EACH TblB NO-LOCK WHERE TblB_No = "ABC":
FIND LAST TblY NO-LOCK WHERE TblY_No = TblB_No.
CREATE Tmp_tbl1
ASSIGN
Tmp_Src = "TblB"
Tmp_No = TblB_No
Tmp_Dt = TblB_Dt
Tmp_Desc = TblB_Desc
Tmp_Qty = TblB_Qty
.
END.
Assign Tmp_Desc = TblY_Desc
"TblA_No already has ""."