create or replace PROCEDURE           
"SP_GETNEXTID" ( p_TABLENAME IN WCMID.TABLENAME%TYPE,  p_CACHESIZE IN WCMID.CACHESIZE%TYPE,  o_NEXTID    OUT WCMID.NEXTID%TYPE )AS begin  select NEXTID into o_NEXTID from WCMID where TABLENAME=p_TABLENAME; update WCMID set NEXTID=NEXTID+p_CACHESIZE where TABLENAME=p_TABLENAME; 
end;这个存储过程好像是用于表的ID的,
是什么意思,怎么用。
比如我想插入语句中用,该怎么用,谢谢

解决方案 »

  1.   

    这样写法有点乱:
    create or replace PROCEDURE          
    SP_GETNEXTID

    p_TABLENAME IN WCMID.TABLENAME%TYPE,  
    p_CACHESIZE IN WCMID.CACHESIZE%TYPE,  
    o_NEXTID    OUT WCMID.NEXTID%TYPE 
    )
    AS 
    begin  
    select NEXTID into o_NEXTID from WCMID where TABLENAME=p_TABLENAME; 
    update WCMID set NEXTID=NEXTID+p_CACHESIZE where TABLENAME=p_TABLENAME;
    commit;  --加一下提交的事务
    end; --调用
    begin
    exec SP_GETNEXTID(参数1,参数2)
    end;
      

  2.   

    生成表的主键,你可以用sequence序列。
      

  3.   

    他这个ID如果是多个程序来取,取到的肯定不会唯一,都没有for update锁定取ID的表。
    怀疑是从其他数据库转过来的。
    建议使用sequence了。
      

  4.   


    create or replace PROCEDURE          
    "SP_GETNEXTID" --存储过程名称
    ( p_TABLENAME IN WCMID.TABLENAME%TYPE,  p_CACHESIZE IN WCMID.CACHESIZE%TYPE,  o_NEXTID    OUT WCMID.NEXTID%TYPE ) --存储过程参数
    AS 
    begin  
    --存储过程执行语句
    select NEXTID into o_NEXTID from WCMID where TABLENAME=p_TABLENAME; 
    update WCMID set NEXTID=NEXTID+p_CACHESIZE
    where TABLENAME=p_TABLENAME; 
    end; 想插入语句就把插入语句的insert into table values()置入beging-end中调试执行即可;