MySQL儲存過程小記

2021-05-25 10:26:57 字數 3108 閱讀 5277

首先來看兩張表:

drop

table

ifexists field_index

create

table field_index

(
schema_name  varchar(100) not

null,

field_name   varchar(100) not

null,

next_index   int

notnull,

constraint field_index_pk primary

key (schema_name,field_name)

);
insert into field_index values('web_user','user_id','1000');
select * from field_index;
drop

table

ifexists web_user

create

table web_user(

userid varchar(30)   not

null,

username varchar(30) not

null,

nickname varchar(30) not

null,

email varchar(50),
password varchar(30) not

null,

registtime timestamp(14) not

null

default now(),

statusid varchar(30) default

'1',

constraint webuser_pk primary

key (userid)

)

然後來看下儲存過程:

drop

procedure

ifexists getnextindex;

create

procedure getnextindex(in tablename varchar(100),in columnname varchar(100),out nextindex varchar(100))

begin
declare stopflag int;
declare cur_1 cursor

forselect next_index from field_index where schema_name = tablename and field_name = columnname ;

declare

continue 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 ;
end

if;

select nextindex;
end;
call getnextindex('web_user','user_id',@sss);
call getnextindex('web_user','user_id_ss',@sss);

儲存過程中我們也可以使用preparestmt的功能。

drop

procedure

ifexists getnextindex;

create

procedure 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,源字串,要在此...