F_GETTABLELID

create or replace function F_GETTABLELID(strTableName  IN VARCHAR2 DEFAULT NULLreturn VARCHAR2 is
  Result 
VARCHAR2(9);
  StoO_rowcnt      
INTEGER;
  strIndex         
NUMBER(90);
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 = 0 THEN
    
BEGIN
      strIndex :
= 1;
      
BEGIN
        
INSERT INTO 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;
  
END IF;
  Result :
= lpad(CAST(strIndex as varchar2), 9'0');
  
return(Result);
end F_GETTABLELID;
多表时:
CREATE OR REPLACE PROCEDURE F_GETMULTITABLELID(strTableName IN VARCHAR2 DEFAULT NULL,
                                               num          
IN VARCHAR2 DEFAULT NULL,
                                               strstartID   
IN OUT VARCHAR2,
                                               strendID     
IN OUT VARCHAR2AS
  StoO_rowcnt 
INTEGER;
  strIndex    
NUMBER(90);
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 = 0 THEN
    
BEGIN
      strIndex :
= 1;
      
BEGIN
        
INSERT INTO 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;
  
END IF;
  strstartID :
= CAST(strIndex as varchar2);
/*取下面几个ID*/
  
BEGIN
    
UPDATE SS_TablesID
       
SET CurrentIDindex = CurrentIDindex +
                             (
CAST(num AS NUMBER(90)) - 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;
posted on 2006-10-24 14:47  老狐狸  阅读(194)  评论(0)    收藏  举报