createorreplacefunction F_GETTABLELID(strTableName INVARCHAR2DEFAULTNULL) returnVARCHAR2is Result VARCHAR2(9); StoO_rowcnt INTEGER; strIndex NUMBER(9, 0); BEGIN NULL; BEGIN StoO_rowcnt :=0; UPDATE SS_TablesID T SET t.CurrentIDindex = t.CurrentIDindex +1 WHERE TableName = strTableName RETURNING CurrentIDindex INTO strIndex; StoO_rowcnt := SQL%ROWCOUNT; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN raise_application_error(SQLCODE, SQLERRM, true); END; IF StoO_rowcnt =0THEN BEGIN strIndex :=1; BEGIN INSERTINTO SS_TablesID (TableName, CurrentIDindex) VALUES (strTableName, strIndex); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN raise_application_error(SQLCODE, SQLERRM, true); END; END; ENDIF; Result := lpad(CAST(strIndex asvarchar2), 9, '0'); return(Result); end F_GETTABLELID;
多表时:
CREATEORREPLACEPROCEDURE F_GETMULTITABLELID(strTableName INVARCHAR2DEFAULTNULL, num INVARCHAR2DEFAULTNULL, strstartID IN OUT VARCHAR2, strendID IN OUT VARCHAR2) AS StoO_rowcnt INTEGER; strIndex NUMBER(9, 0); BEGIN NULL; BEGIN StoO_rowcnt :=0; UPDATE SS_TablesID T SET t.CurrentIDindex = t.CurrentIDindex +1 WHERE TableName = strTableName RETURNING CurrentIDindex INTO strIndex; StoO_rowcnt := SQL%ROWCOUNT; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN raise_application_error(SQLCODE, SQLERRM, true); END; IF StoO_rowcnt =0THEN BEGIN strIndex :=1; BEGIN INSERTINTO SS_TablesID (TableName, CurrentIDindex) VALUES (strTableName, strIndex); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN raise_application_error(SQLCODE, SQLERRM, true); END; END; ENDIF; strstartID :=CAST(strIndex asvarchar2); /**//*取下面几个ID*/ BEGIN UPDATE SS_TablesID SET CurrentIDindex = CurrentIDindex + (CAST(num ASNUMBER(9, 0)) -1) WHERE TableName = F_GETMULTITABLELID.strTableName RETURNING CurrentIDindex INTO strIndex; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN raise_application_error(SQLCODE, SQLERRM, true); END; F_GETMULTITABLELID.strendID :=CAST(F_GETMULTITABLELID.strIndex AS VARCHAR2); end F_GETMULTITABLELID;