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

推荐订阅源

宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
Jina AI
Jina AI
博客园 - 叶小钗
雷峰网
雷峰网
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
量子位

博客园 - 老狐狸

关于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;