首先來看兩張表:
droptable
ifexists field_index
createtable field_index
(
schema_name varchar(100) notnull,
field_name varchar(100) notnull,
next_index intnotnull,
constraint field_index_pk primarykey (schema_name,field_name)
);
insert into field_index values('web_user','user_id','1000');
select * from field_index;
droptable
ifexists web_user
createtable web_user(
userid varchar(30) notnull,
username varchar(30) notnull,
nickname varchar(30) notnull,
email varchar(50),
password varchar(30) notnull,
registtime timestamp(14) notnull
default now(),
statusid varchar(30) default'1',
constraint webuser_pk primarykey (userid)
)
然後來看下儲存過程:
dropprocedure
ifexists getnextindex;
createprocedure getnextindex(in tablename varchar(100),in columnname varchar(100),out nextindex varchar(100))
begin
declare stopflag int;
declare cur_1 cursorforselect next_index from field_index where schema_name = tablename and field_name = columnname ;
declarecontinue handler for
notfound
set stopflag=1;
set nextindex = -1;
open cur_1;
repeat
fetch cur_1 into nextindex;
until stopflag = 1
end repeat ;
close cur_1;
if nextindex = -1 then
insert into field_index values(tablename,columnname,'10001');
set nextindex = '10000';
else
update field_index set next_index = next_index + 1 where schema_name = tablename and field_name = columnname ;
endif;
select nextindex;
end;
call getnextindex('web_user','user_id',@sss);
call getnextindex('web_user','user_id_ss',@sss);
儲存過程中我們也可以使用preparestmt的功能。
dropprocedure
ifexists getnextindex;
createprocedure getnextindex(in schema_name varchar(100),in field_name varchar(100))
begin
declare sqls varchar(100) ;
declare schemaname varchar(4000);
declare fieldname varchar(4000);
set schemaname = schema_name;
set fieldname = field_name;
set sqls = concat('select * from field_index' );
set sqls = concat(sqls,' where schema_name = ? and field_name = ? ');
set @ssql = sqls;
set @param1 = schemaname;
set @param2 = fieldname;
prepare stmt from @ssql;
execute stmt using @param1,@param2;
end;
call getnextindex('web_user','user_id');
儲存過程小記
簡單示例一 create or replace procedure testp isal in number 輸入引數不能有長度限制 isxname varchar2 10 變數要有長度限制 cursor cur 1 is select ename from emp where sal isal 游...
儲存過程小記
use un visa go 建立儲存過程 create procedure pro test yc int,lyq int,nsx int output asif yc lyq print yc lyq else print yc0 and yc 0 set nsx yc print nsx go...
Oracle儲存過程小記
oracle儲存過程小記 dual 在oracle中,我們有時候會需要判斷乙個字串裡邊是否包含有某乙個串 首先,oracle為我們提供了instr這個函式 instr string1,string2 start position nth appearance 引數分析 string1,源字串,要在此...