mysql存儲過程字元串參數-九游会j9娱乐平台
⑴ mysql 存儲過程,如何把一個 字元串變成一個 整形數 比如 「33」 變成整數的33
convert(str, signed)
⑵ mysql資料庫中字元串拼接問題
mysql不能直接運行動態sql語句的,但是可以寫在存儲過程中,然後調用過程執行,具體如下:
(1)定義存儲過程,示例:
createdefiner=`root`@`localhost`procedure`query_extra_table`(table_indexvarchar(255))
begin
set@sql=concat("select*fromtbl_order_",table_index);
preparestmtfrom@sql;
executestmt;
end
(2)調用存儲過程:
callquery_extra_table('483')
⑶ mysql存儲過程中分支語句有哪些
存儲過程:
create procere p()
begin
/*thi procere does nothing*/
end;
1.參數
parameters 參數
讓我們更進一步的研究怎麼在存儲過程中定義參數1. create procedure p5
() ...
2. create procedure p5
([in] name data-type) ...
3. create procedure p5
(out name data-type) ...
4. create procedure p5
(inout name data-type) ...
2.conditions and if-then-else 條件式和 if-then-else
3.loops 循環語句
while ... end while
loop ... end loop
repeat ... end repeat
goto
4.declare handler syntax 聲明異常處理的語法
declare
{ exit | continue }
handler for
{ error-number | { sqlstate error-string } | condition }
sql statement
5.cursors 游標
游標實現功能摘要:
declare cursor-name cursor for select ...;
open cursor-name;
fetch cursor-name into variable [, variable];
close cursor-name;
已現經在可我以們完開成始基著本眼的游事標了務如。聲雖明然游我標們,的打存開儲游過標程,中從的游游標標里語法讀取還,並關沒閉有完游整標。
6.functions 函數
summary:
摘要 create function
limitations of functions
函數的限制
我們已經很清楚可以在存儲過程中使用的元素了。下面我要講的是前面沒有提到的函數。
⑷ 創建存儲過程sql語句
1)過程名
存儲過程的名稱,默認在當前資料庫中創建。若需要在特定資料庫中創建存儲過程,則要在名稱前面加上資料庫的名稱,即db_name.sp_name。
需要注意的是,名稱應當盡量避免選取與mysql內置函數相同的名稱,否則會發生錯誤。
2)過程參數
存儲過程的參數列表。其中,<參數名>為參數名,<類型>為參數的類型(可以是任何有效的mysql數據類型)。當有多個參數時,參數列表中彼此間用逗號分隔。存儲過程可以沒有參數(此時存儲過程的名稱後仍需加上一對括弧),也可以有1個或多個參數。
mysql存儲過程支持三種類型的參數,即輸入參數、輸出參數和輸入/輸出參數,分別用in、out和inout三個關鍵字標識。其中,輸入參數可以傳遞給一個存儲過程,輸出參數用於存儲過程需要返回一個操作結果的情形,而輸入/輸出參數既可以充當輸入參數也可以充當輸出參數。
⑸ mysql存儲過程一個參數有多個逗號分割
這個應該可以使用字元串拼接,你是不是這樣寫存儲過程:
create procere p_proc(var_in int)
begin
delete from [tablename] where [colname] in (var_in);
end
然後又這樣調用:
call p_proc(1, 2, 3);
這樣肯定不行,那麼你可以這樣:
create procere p_proc(var_in varchar(5000))
begin
set @sql = concat("delete from [tablename] where [colname] in (", var_in, ")");
prepare stmt_exe_sql from @sql;
execute stmt_exe_sql;
deallocate prepare stmt_exe_sql;
end
這樣就相當於把(1, 2, 3)拼接成語句"delete from [tablename] where [colname] in (1, 2, 3)", 然後執行,就可以刪除了。
⑹ mysql中存儲過程或函數 如何將逗號分隔的字元串倒序輸出 如 :4531,8651,3256 變為: 3256,8651,4531
delimiter//
dropfunctionreversewordby//
createfunctionreversewordby(poldvaltinytext,pdivcharchar(1))
returnstinytext
begin
/**預期結果.**/
declarevresulttinytext;
--當前逗號的位置.
declarevindexint;
--前一個逗號的位置.
declarevprevindexint;
--查詢第一個逗號的位置.
setvindex=instr(poldval,pdivchar);
ifvindex=0then
--參數中沒有逗號,直接返回.
returnpoldval;
endif;
--初始化情況,前一個逗號不存在.
setvprevindex=0;
--初始化結果為空白字元.
setvresult='';
--循環處理。
whilevindex>0do
--設置結果=本次查詢的結果,以前的查詢結果.
setvresult=concat(substring(poldval,vprevindex 1,(vindex-vprevindex-1)),pdivchar,vresult);
--前一個逗號的位置=當前逗號的位置
setvprevindex=vindex;
--查詢下一個逗號的位置.
setvindex=locate(pdivchar,poldval,vprevindex 1);
endwhile;
--最後追加最後一組數據.
setvresult=concat(substring(poldval,vprevindex 1),pdivchar,vresult);
--清除掉最後一個逗號.
setvresult=left(vresult,length(vresult)-1);
--返回結果.
returnvresult;
end;
//
delimiter;
selectreversewordby('4531,8651,3256',',')a;
selectreversewordby('1,12,123,1234,12345,123456',',')b;
輸出結果:
mysql>selectreversewordby('4531,8651,3256',',')a;
----------------
|a|
----------------
|3256,8651,4531|
----------------
1rowinset(0.00sec)
mysql>
mysql>selectreversewordby('1,12,123,1234,12345,123456',',')b;
----------------------------
|b|
----------------------------
|123456,12345,1234,123,12,1|
----------------------------
1rowinset(0.00sec)
⑺ mysql存儲過程一個參數有多個逗號分割
這個應該可以使純笑用字元串拼接,你是不是這樣寫存儲陸昌過程:
create procere p_proc(var_in int)
begin
delete from [tablename] where [colname] in (var_in);
end
然後又這樣調用做悉含:
call p_proc(1, 2, 3);
這樣肯定不行,那麼你可以這樣:
create procere p_proc(var_in varchar(5000))
begin
set @sql = concat("delete from [tablename] where [colname] in (", var_in, ")");
prepare stmt_exe_sql from @sql;
execute stmt_exe_sql;
deallocate prepare stmt_exe_sql;
end
這樣就相當於把(1, 2, 3)拼接成語句"delete from [tablename] where [colname] in (1, 2, 3)", 然後執行,就可以刪除了。