mysql存儲過程字元串參數
⑴ 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)", 然後執行,就可以刪除了。