core-jgi/db/database/Procedures/AD_Sequence_Next.sql

57 lines
1.8 KiB
MySQL
Raw Normal View History

2006-11-17 10:06:54 +07:00
CREATE OR REPLACE PROCEDURE AD_Sequence_Next
(
p_TableName IN VARCHAR2,
p_ID IN NUMBER,
p_NextNo OUT NUMBER
)
AS
/*************************************************************************
* The contents of this file are subject to the Adempiere License. You may
* obtain a copy of the License at http://www.adempiere.org/license.html
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for details. Code: Adempiere ERP+CRM
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
*************************************************************************
* $Id: AD_Sequence_Next.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
***
* Title: Get the next sequence number of TableName
* Description:
* store in parameter p_NextNo
* if ID < 1000000, use System Doc Sequence
************************************************************************/
v_NextNoSys NUMBER;
v_ResultStr VARCHAR(255);
BEGIN
v_ResultStr := 'Read';
SELECT CurrentNext, CurrentNextSys
INTO p_NextNo, v_NextNoSys
FROM AD_Sequence
WHERE Name = p_TableName
AND IsActive = 'Y'
AND IsTableID = 'Y'
AND IsAutoSequence = 'Y'
FOR UPDATE OF CurrentNext, CurrentNextSys;
v_ResultStr := 'Write';
IF (v_NextNoSys <> -1 AND p_ID < 1000000) THEN -- System No
UPDATE AD_Sequence
SET CurrentNextSys = CurrentNextSys + IncrementNo,
Updated = SysDate
WHERE Name = p_TableName;
p_NextNo := v_NextNoSys;
ELSE -- Standard No
UPDATE AD_Sequence
SET CurrentNext = CurrentNext + IncrementNo,
Updated = SysDate
WHERE Name = p_TableName;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR (-20100, 'Table Sequence not found ');
-- || v_ResultStr || ': ' || p_TableName);
END AD_Sequence_Next;
/