基礎 儲存過程

2021-07-17 04:12:58 字數 3856 閱讀 9727

github:

mysql 5.0開始支援儲存過程,儲存過程是存在資料庫中的一段sql集合,呼叫儲存過程可以減少很多任務作量,

減少資料在資料庫和應用伺服器上的傳輸,對於提高資料處理的效率,同時注意,儲存過程沒有or replace的關鍵字,

mysql的儲存過程引數包括 in,out,inout 三種模式。

建立儲存過程語法:

create procedure proc_name(proc_parameter[,...])

[characteristic...]

routine_body

引數代表含義:

proc_parameter: [in | out | inout]  param_name type

characteristic:

language sql | [not]deterministic

| | sql security

| comment 'string'

routine_body: 儲存過程

更改儲存過程語法:

alter procedure proc_name [characteristic...]

characteristic:

| sql security

| comment 'string'

儲存過程呼叫:

call pro_name([parameter,......]);

建立表:

create table `t_user_main` (

`f_userid` int(10) not null auto_increment comment '使用者id,作為主鍵',

`f_username` varchar(5) default null comment '使用者名稱',

`f_age` int(3) default null comment '年齡',

primary key (`f_userid`)

) engine=innodb auto_increment=1 default charset=utf8;

插入資料:

insert into t_user_main (f_username, f_age) 

values('one',24),('two',25),('three',26),('four',27),('five',28),('six',29);

建立乙個簡單的例項,該儲存過程統計t_user_main表的條數,過程引數為out模式。

# 建立儲存過程

delimiter $$ -- 定界符

# 開始建立儲存過程

create procedure user_main_pro(out s int)

begin

select count(*) into s from t_user_main;

end $$ # 建立儲存過程結束

delimiter;# 恢復資料庫定界符

關於建立儲存過程的分析:

mysql 中建立儲存過程與oracle等資料庫中不同的是,mysql需要使用定界符(delimiter),

因為mysql預設 『分號' 為執行結束,通過定界符指定結束符號,避免mysql建立儲存過程

編譯報錯。當儲存過程建立成功後,再通過delimiter ;將mysql語句結束符號恢復為分號。

這個地方使用out模式,儲存過程再被呼叫時,會返回out引數,將t_user_main總條數返回,

通過變數接受儲存過程返回的執行結果。

儲存過程呼叫:

通過call去呼叫儲存過程,set設定的變數接受call呼叫時儲存過程out模式返回的處理結果。

in 和out一起使用:

delimiter $$

create procedure user_main_pro4(in v_id int,out v_count int)

begin

select count(*) into v_count from t_user_main where f_userid > v_id;

end $$

delimiter;

呼叫:

mysql中變數從5.1後不區分大小寫。

變數的宣告:

通過declare可以定義乙個區域性變數,變數的作用範圍begin...end塊中;

變數語句必須解除安裝復合語句開頭,並且在其他語句的前面;

一次性可以宣告多個變數;

變數定義語法:declare var_name[,...] type [default value]

儲存過程中定義變數的用法:

delimiter $$

create procedure user_main_pro3(in v_id integer)

begin

#定義兩個變數

declare v_username varchar(50);

declare v_username2 varchar(50);

#set賦值

set v_username = 's';

#select ... into 賦值

select f_username into v_username2 from t_user_main

where f_userid = v_id;

#ddl語句

insert into t_user_main (f_username) values(concat(v_username,'*',v_username2));

end $$

delimiter;

儲存過程呼叫:

變數賦值:變數可以通過直接賦值,也可以通過查詢語句賦值。

直接賦值語法:set var_name = expr[,var_name=expr]...

在上面儲存過程中,定義乙個v_testset變數,通過set直接賦值,eg:

declare v_testset varchar(50);

set v_testset = 't';

通過select...into...賦值,通過這種方式賦值,要求查詢返回只有一行結果,

使用語法:

select col_name[,...] into var_name[,...] table_expr;

eg:select f_username into v_username2 from t_user_main where f_userid = v_id;

檢視儲存過程狀態語法:

show procedure status [like 'pattern']

檢視儲存過程的定義語法:

儲存過程基礎

建立輸入引數儲存過程 create or replace procedure lyr3 name varchar2,age number is begin insert into student values sys guid name,age end 建立輸出儲存過程 create procedu...

儲存過程基礎

儲存過程基礎語法 1.1 基本結構 create or replace procedure 儲存過程名字 引數1 in number,引數2 in number as 變數1 integer 0 變數2 date begin end 1.2 select into statement 將select...

儲存過程基礎

這一篇要總結的是儲存過程,包括儲存過程有哪幾種,如何建立,以及最後如何呼叫儲存過程。所以分為以下幾個方面進行總結。1,不帶引數的儲存過程 2,帶輸入引數的儲存過程 3,帶輸入和輸出引數的儲存過程 4,帶返回值的儲存過程 例如,以下儲存過程返回employees表中所有職員的記錄。儲存過程 use t...