惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
S
SegmentFault 最新的问题
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
I
InfoQ
U
Unit 42
博客园_首页
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
T
Tailwind CSS Blog
量子位

博客园 - 老狐狸

关于Update语句在不同数据库中的差别 出错存储过程 正则表达式求值 - 老狐狸 - 博客园 创建层次查询 ultrawebgrid - 老狐狸 - 博客园 javascript - 老狐狸 - 博客园 case when用法和and 后加条件 exp/imp导出导入工具的使用 ASP.NET1.1中Grid自定义眉头 asp.net1.0 TreeView asp.net2.0 TreeView 创建记录、数组 关闭远程数据库连接 创建游标 创建新的序列 创建隐式游标 创建临时表 更新表(多表相关联)
F_GETTABLELID
老狐狸 · 2006-10-24 · via 博客园 - 老狐狸

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;