Neil:
Here is my SUBR code and ISOMODE = 1
SUBROUTINE UPSTRACK.TRIGGER(C.DATA,DATA1)
*
* TRIGGER CALLED TO UPDATE FILE SHIPMENT_INFO FOR
* SHIPPERS TO READ TO CREATE SHIPPING
* LABEL
* JR MOORE 02/17/22
*
* DECLARE VARIABLES
NEWREC = "" ; INVNO = "" ; NEWREC = "" ; OREC = "" ; CSZREC = "" ; VM = CHAR(253)
TYPE = "" ; TEST.ID = ""
* OPEN FILES
OPEN 'UPS_ORDER_TRACKING' TO F.INFO ELSE ABORT 201,'SHIPMENT_INFO'
OPEN 'ORDER' TO F.ORD ELSE ABORT 201,'ORDER'
OPEN 'TRANSFER' TO F.TRANSFER ELSE ABORT 201,'TRANSFER'
OPEN 'OLD-INVOICES' TO F.OLDINV ELSE ABORT 201,'OLD-INVOICES'
DOCID = @RECORD<1>
TRACKNUM = @ID
DEBUG
* ESTABLISH DOC ID EITHER INV# OR TRANSFER #
* IF ORDER INSERT TRACKING IN ORDER RECORD
IF INDEX(DOCID,"-",1) > 0 THEN
* IF NO ORDERS WITH INV# FOUND TRY INVOICE FILE
BSCAN IDX.REC,RECX.VAR FROM F.ORD,DOCID USING "INV#" ELSE RECX.VAR = ''
ORDID = ''
IF RECX.VAR # '' THEN
TEST.ID = RECX.VAR<1>
READU OREC FROM F.ORD, TEST.ID THEN
IF OREC<63> = DOCID THEN
TYPE = "ORD"
ORDID = TEST.ID
END
END
END
IF TEST.ID = '' THEN
* REPEAT
* END ELSE
READU OREC FROM F.OLDINV, DOCID THEN
TYPE = "INV"
END
END
IF OREC # "" THEN
*DETERMINE HOW MANY PARTS ON ORDER
NUMPARTS = DCOUNT(OREC<27>,@VM)
* INSERT "M" AT 27 AND COMMENT AND TRACK NUM AT COUNT OF PARTS +1
OREC<27,NUMPARTS+1> = "M"
OREC<28,NUMPARTS+1> = "TRACKING"
OREC<173,NUMPARTS+1> = TRACKNUM
* INSERT COMMENT AT PARTS +2
OREC<27,NUMPARTS+2> = "C"
OREC<28,NUMPARTS+2> = "TRACKING"
END
END ELSE
* IF NOT FOUND IN ORDER FILE TRY TRANSFER
READU OREC FROM F.TRANSFER, DOCID THEN
TYPE = "TR"
OREC<102,-1> = TRACKNUM
END
END
* write out the tracking data based on the document type
BEGIN CASE
CASE TYPE = "ORD"
WRITE OREC ON F.ORD, TEST.ID
CASE TYPE = "INV"
WRITE OREC ON F.OLDINV, DOCID
CASE TYPE = "TR"
WRITE OREC ON F.TRANSFER, DOCID
CASE 1
RETURN
END CASE
RETURN
------------------------------
Jr Moore
IT Special Projects
Auto Parts Warehouse
Hillsboro OR US
------------------------------
Original Message:
Sent: 06-22-2022 17:34
From: Neil Morris
Subject: FILE TRIGGER ERROR WITH SQL INSERT STATEMENT
Thanks JR. Then I'm "guessing" the index based subroutine is not setting a READU lock on the record being written? If so, using ED would not have an issue as the update would not be within a transaction. But doing a SQL update would be transaction based. Would this be the case? If not, can you supply the index based trigger subroutine code?
Thanks,
Neil
------------------------------
Neil Morris
Universe Advanced Technical Support
Rocket Software
Original Message:
Sent: 06-22-2022 17:17
From: Jr Moore
Subject: FILE TRIGGER ERROR WITH SQL INSERT STATEMENT
Neil:
Thanks for the response. The trigger is a index based trigger calling a subr.
Thanks JR Moore
------------------------------
Jr Moore
IT Special Projects
Auto Parts Warehouse
Hillsboro OR US
Original Message:
Sent: 06-22-2022 17:13
From: Neil Morris
Subject: FILE TRIGGER ERROR WITH SQL INSERT STATEMENT
Hi JR,
Does the trigger subroutine place a record lock on the record being written? In UniVerse, SQL update statements are executed in a transaction so the rules are different when just updating with the ED command. The error message seems to indicate that the appropriate locks are not set. In terms of the TRIGGER, is this a SQL Trigger generated via a CREATE TRIGGER command? Or a trigger created via an indexed based subroutine? And one additional question is what is the setting of ISOMODE in the uvconfig file?
Thanks,
Neil
------------------------------
Neil Morris
Universe Advanced Technical Support
Rocket Software
Original Message:
Sent: 06-22-2022 12:50
From: Jr Moore
Subject: FILE TRIGGER ERROR WITH SQL INSERT STATEMENT
I have a file trigger when a record is updated it writes information to another file to update UPS tracking in an order file. If I use a SQL statement in Universe to insert the record I get a permissions error (Program "UPSTRACK.TRIGGER": Line 81, FATAL:The locks necessary for database operations at the current isolation
level (2) are not held by this process.) If I add the item through ED it works fine updates all the files and adds the new record. Are there different levels of permission when execute SQL from TCL vs. ED?
Thanks JR Moore
------------------------------
Jr Moore
IT Special Projects
Auto Parts Warehouse
Hillsboro OR US
------------------------------