79456206

Date: 2025-02-21 02:00:01
Score: 2
Natty:
Report link

This answers the request for concurrency and gap-free unless rollback, which I don't think will ever be necessary assuming the row in the table holding the counter exists. In this example, XASYS6 is the table, COMPANY_NUMBER_ID is the inique key column and NEXT_AVAIL_SOLD_TO_CUSTOMER_NO is the counter.

This is Db2 for i SQL PL, but it should be 100% compatible.

IN @PARMORIG_COMPANY_NUMBER_ID DECIMAL(3,0),
OUT @NEXTAVAILABLESOLDTOCUSTID DECIMAL(10,0)

SELECT NEXT_AVAIL_SOLD_TO_CUSTOMER_NO INTO @NEXTAVAILWORKVAR10 FROM XASYS6 WHERE ( ( @PARMORIG_COMPANY_NUMBER_ID = COMPANY_NUMBER_ID ) ) WITH RS ;

UPDATE XASYS6 SET NEXT_AVAIL_SOLD_TO_CUSTOMER_NO = @NEXTAVAILWORKVAR10 + 1 WHERE ( ( @PARMORIG_COMPANY_NUMBER_ID = COMPANY_NUMBER_ID ) ) ;

SET @NEXTAVAILABLESOLDTOCUSTID = @NEXTAVAILWORKVAR10 ;

Reasons:
  • Long answer (-0.5):
  • No code block (0.5):
  • User mentioned (1): @PARMORIG_COMPANY_NUMBER_ID
  • User mentioned (0): @NEXTAVAILABLESOLDTOCUSTID
  • User mentioned (0): @NEXTAVAILWORKVAR10
  • User mentioned (0): @PARMORIG_COMPANY_NUMBER_ID
  • User mentioned (0): @NEXTAVAILWORKVAR10
  • User mentioned (0): @PARMORIG_COMPANY_NUMBER_ID
  • User mentioned (0): @NEXTAVAILABLESOLDTOCUSTID
  • User mentioned (0): @NEXTAVAILWORKVAR10
  • Low reputation (1):
Posted by: Rexford2