mysql儲存過程和函式使用例項

2022-07-08 21:24:13 字數 3595 閱讀 5710

1.需求:根據輸入的年份,月份,和當前系統的年份比較,不滿1年按1年計算,多出1年11個月也按1年計算。

2.計算得出來的使用年份,計算車輛殘值。

3.儲存過程

delimiter $$

use`dbtest`$$

drop

procedure

ifexists

`sp_calc_year`$$

create

procedure `sp_calc_year`(in y int,in m int,out diff int

)begin

#declare

current date default

now();

declare c_y int

default0;

declare c_m int

default0;

set c_y =

year

(now());

set c_m =

month

(now());

if c_y > y then

if c_m < m then

set c_y = c_y -1;

endif

;

set diff = c_y -

y;

if diff =

0then

set diff =1;

endif

;

else

set diff =1;

endif

;

end$$

delimiter ;

4.呼叫儲存過程語法

set

@p_iny

=2011

;set

@p_inm=10

;set

@p_out=0

; call sp_calc_year(

@p_iny,@p_inm,@p_out

);select

@p_out;

5.函式

delimiter $$

create

/*[definer = ]

*/function `dbtest`.`sp_calc_ym`(y int, m int

)

returns

int/*

language sql

| [not] deterministic

| | sql security

| comment 'string'

*/begin

declare c_y int

default0;

declare c_m int

default0;

declare diff int

default1;

set c_y =

year

(now());

set c_m =

month

(now());

if c_y > y then

if c_m < m then

set c_y = c_y -1;

endif

;

set diff = c_y -

y;

if diff =

0then

set diff =1;

endif

;

else

set diff =1;

endif

;

return

diff;

end$$

delimiter ;

6.呼叫函式語法

select `sp_calc_ym`(2011,10);

7.綜合使用

select

@var:=

80000

*power(0.85,2) as "車輛殘值";

select

reg_no,

case reg_no when

718170554

then

'黃色賓利,滬a55662

'when

124553063

then

'紅色賓利,滬a55661

'when

114480011

then

'白色賓士,滬n55663

'when

816053337

then

'褐色賓利,滬n55665

'when

653973365

then

'銀色阿斯頓馬丁,滬n55666

'when

990125871

then

'綠色阿斯頓馬丁,京b55667

'when

425710387

then

'紅色寶馬,京b55668

'when

704411338

then

'黃色寶馬,滬d55669

'when

116323731

then

'白色寶馬,杭c55670

'when

589618212

then

'黑色寶馬,滬d55671

'else

'more

'end

astestcol ,

plate_num,

c.brand_txt

as"品牌",

c.year

as"年份",

c.month

as"月份",

c.guide_price

as"指導價",

c.suggest_price

as"建議小時**",

c.hour_price

as"每小時**",

c.day_price

as"天**",

c.week_price

as"周**" ,

c.month_price

as"月**",

c.min_rent_time

as"最少租用時間(小時)",

c.max_rent_time

as"最長租用時間(小時)",

80000

*power(0.85,sp_calc_ym(c.year,c.month)) as

"車輛殘值"

from car as c where reg_no in ('

718170554

','124553063

','114480011

','816053337

','653973365

','990125871

','116323731

','704411338

','425710387

','589618212

') order

by reg_no asc;

mysql 過程和函式 MySQL 儲存過程和函式

變數 系統變數 變數由系統提供,不是使用者自定義的,屬於伺服器層面 全域性變數 會話變數 如果是全域性級別,則需要加global,如果是會話級別,則需要加session,如果不寫,則預設是會話 檢視全域性變數 show global variables show global variablesli...

MySQL儲存過程和儲存函式

儲存過程和儲存函式 mysql的儲存過程 stored procedure 和函式 stored function 統稱為stored routines。1.儲存過程和函式的區別 函式只能通過return語句返回單個值或者表物件。而儲存過程不允許執行return,但是通過out引數返回多個值。函式是...

Mysql 儲存過程和函式

一 儲存過程 procedure 本質上沒區別,執行的本質都一樣。只是函式有如 只能返回乙個變數的限制。而儲存過程可以返回多個。函式是可以嵌入在sql中使用的,可以在select中呼叫,而儲存過程要讓sql的query 可以執行,需要把 mysql real connect 的最後乙個引數設定為cl...