當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 存儲配置 » mysql存儲過程怎麼寫

mysql存儲過程怎麼寫-九游会j9娱乐平台

發布時間: 2024-11-19 03:47:55

① mysql執行存儲過程語句怎麼寫

mysql用call命令執行存儲過程,例如

calluser_add();

上面的sql就執行了一個名字叫user_add的存儲過程

② 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存儲過程怎麼寫


mysql 存儲過程是一些 sql 語句的集合,比如有的時候我們可能需要一大串的 sql 語句,或者說在編寫 sql 語句的過程中還需要設置一些變數的值,這個時候我們就完全有必要編寫一個存儲過程。下面我們來介紹一下如何創建一個存儲過程。
語法格式:
可以使用 create procedure 語句創建存儲過程。
語法格式如下:
create procedure <過程名> ( [過程參數[,?] ] ) <過程體>
[過程參數[,?] ] 格式
[ in | out | inout ] <參數名> <類型>語法說明如下:
1) 過程名
存儲過程的名稱,默認在當前資料庫中創建。若需要在特定資料庫中創建存儲過程,則要在名稱前面加上資料庫的名稱,即 db_name.sp_name。需要注意的是,名稱應當盡量避免選取與 mysql 內置函數相同的名稱,否則會發生錯誤。
2) 過程參數
存儲過程的參數列表。其中,<參數名>為參數名,<類型>為參數的類型(可以是任何有效的 mysql 數據類型)。當有多個參數時,參數列表中彼此間用逗號分隔。存儲過程可以沒有參數(此時存儲過程的名稱後仍需加上一對括弧),也可以有 1 個或多個參數。

mysql 存儲過程支持三種類型的參數,即輸入參數、輸出參數和輸入/輸出參數,分別用 in、out 和 inout 三個關鍵字標識。其中,輸入參數可以傳遞給一個存儲過程,輸出參數用於存儲過程需要返回一個操作結果的情形,而輸入/輸出參數既可以充當輸入參數也可以充當輸出參數。需要注意的是,參數的取名不要與數據表的列名相同,否則盡管不會返回出錯信息,但是存儲過程的 sql 語句會將參數名看作列名,從而引發不可預知的結果。
3) 過程體
存儲過程的主體部分,也稱為存儲過程體,包含在過程調用的時候必須執行的 sql 語句。這個部分以關鍵字 begin 開始,以關鍵字 end 結束。若存儲過程體中只有一條 sql 語句,則可以省略 begin-end 標志。

在存儲過程的創建中,經常會用到一個十分重要的 mysql 命令,即 delimiter 命令,特別是對於通過命令行的方式來操作 mysql 資料庫的使用者,更是要學會使用該命令。

在 mysql 中,伺服器處理 sql 語句默認是以分號作為語句結束標志的。然而,在創建存儲過程時,存儲過程體可能包含有多條 sql 語句,這些 sql 語句如果仍以分號作為語句結束符,那麼 mysql 伺服器在處理時會以遇到的第一條 sql 語句結尾處的分號作為整個程序的結束符,而不再去處理存儲過程體中後面的 sql 語句,這樣顯然不行。為解決這個問題,通常可使用 delimiter 命令將結束命令修改為其他字元。

語法格式如下:
delimiter $$語法說明如下:$$ 是用戶定義的結束符,通常這個符號可以是一些特殊的符號,如兩個「?」或兩個「¥」等。當使用 delimiter 命令時,應該避免使用反斜杠「」字元,因為它是 mysql 的轉義字元。
在 mysql 命令行客戶端輸入如下sql語句。
mysql > delimiter ??成功執行這條 sql 語句後,任何命令、語句或程序的結束標志就換為兩個問號「??」了。

若希望換回默認的分號「;」作為結束標志,則在 mysql 命令行客戶端輸入下列語句即可:
mysql > delimiter ;注意:delimiter 和分號「;」之間一定要有一個空格。在創建存儲過程時,必須具有 create routine 許可權。可以使用 show procedure status 命令查看資料庫中存在哪些存儲過程,若要查看某個存儲過程的具體信息,則可以使用 show create procedure <存儲過程名>。
創建不帶參數的存儲過程
存儲過程的作用是從學生成績信息表中查詢學生的成績信息,輸入的 sql 語句和執行過程如下所示。
mysql> delimiter //
mysql> create procedure showstuscore()
-> begin
-> select * from tb_students_score;
-> end //
query ok, 0 rows affected (0.09 sec)

④ 關於mysql存儲過程

create table mytb
(tid int,
subject varchar(100),
content varchar(100))

eg:測試數據:
20 計算機應用 應用軟體開發
21 計算機操作系統 操作系統詳解
22 c# c#開發實戰
=======================================
說明一點:tid編號是連續的,如(1,2,3,4···)

存儲過程如下,測試通過:

create proc my_search
@beg_id int ,
@end_id int
as

declare @names varchar(200),
@bcp varchar(8000)
if(@beg_id<@end_id)
begin

while @beg_id<=@end_id
begin
select @names=subject from mytb where tid=@beg_id
set @bcp = 'bcp "select content from 資料庫名.dbo.mytb where tid = ' rtrim(@beg_id) '" queryout "e:\11\' rtrim(@names) '.txt" -c -u"sa" -p"sa"'

exec master..xp_cmdshell @bcp
set @beg_id=@beg_id 1
end
end

==================加路徑後過程==============

--exec my_search 20,21,'e:\11'

alter proc my_search
@beg_id int ,
@end_id int ,
@path varchar(200)
as

if(right(@path,1)='\')
begin
set @path=left(@path,len(@path)-1)
end

declare @names varchar(200),
@bcp varchar(8000)
if(@beg_id<@end_id)
begin

while @beg_id<=@end_id
begin
select @names=subject from mytb where tid=@beg_id
set @bcp = 'bcp "select content from cdma.dbo.mytb where tid = ' rtrim(@beg_id) '" queryout "' @path '\' rtrim(@names) '.txt" -c -u"sa" -p"sa"'

exec master..xp_cmdshell @bcp
set @beg_id=@beg_id 1
end
end

=======
呵呵,很抱歉啊 樓主,沒能實現你的要求,
mssql我不熟,我想語法大概也是差不多吧,

⑤ 【mysql】存儲過程 循環插入數據

在開發工作中,時常需要模擬數據生成,手動添加顯然效率不高。這時,mysql的存儲過程就派上了用場。

首先,打開navicat,找到工具欄中的函數選項,然後選擇新建功能,定位到過程選項。無需設置入參,簡單點擊即可完成步驟一。

接下來,編寫循環插入的核心代碼。只需將代碼段中的表名和欄位名替換為你實際需要的,例如設置一個簡單的while循環,如'i'從1開始,當'i'小於或等於2時,循環執行兩次,如:while (i<=2)。

完成後,保存你的存儲過程。在右側操作欄,單擊運行按鈕,即可執行預設的循環插入操作。這樣,你就可以快速生成所需數量的數據了。

存儲過程的好處在於,一旦創建並保存,後續任何時候需要在相同函數目錄下使用這些數據生成,都能直接調用,非常方便快捷。

⑥ mysql 存儲過程

.關於mysql的存儲過程

存儲過程是資料庫存儲的一個重要的功能,但是mysql在5.0以前並不支持存儲過程,這使得mysql在應用上大打折扣。好在mysql 5.0終於開始已經支持存儲過程,這樣即可以大大提高資料庫的處理速度,同時也可以提高資料庫編程的靈活性。

mysql存儲過程的創建

(1).格式

mysql存儲過程創建的格式:create procedure過程名([過程參數[,...]])
[特性...]過程體

這里先舉個例子:

  • mysql>delimiter//

  • mysql>createprocedureproc1(outsint)

  • ->begin

  • ->selectcount(*)intosfromuser;

  • ->end

  • ->//

  • mysql>delimiter;


  • 註:
  • (1)這里需要注意的是delimiter //和delimiter ;兩句,delimiter是分割符的意思,因為mysql默認以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成sql語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用delimiter關鍵字申明當前段分隔符,這樣mysql才會將";"當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。

    (2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。

    (3)過程體的開始與結束使用begin與end進行標識。

⑦ 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資料庫存儲過程怎麼寫

創建存儲過程
mysql> delimiter $ -- delimiter $是設置 $為命令終止符號,代替默認的分號,因為分號有其他用處.
mysql> create procere sp_test(in pi_id int, out po_name varchar(10))
-> begin
-> select * from test.tb_test;
-> select tb_test.name into po_name from test.tb_test where tb_test.id = pi_id;
-> end
-> $
query ok, 0 rows affected (0.00 sec)
mysql> delimiter ; -- 恢復分號作為分隔終止符號

5.調用存儲過程
mysql> set @po_name='';
query ok, 0 rows affected (0.00 sec)
mysql> call sp_test(1,@po_name);

⑨ mysql 存儲過程或函數 split 怎麼寫

mysql 存儲過程或函數 split 怎麼寫
1、函數必須指定返回值,且參數默認為in類型。
2、存儲過程沒返回值,參數可以是 in,out,in out類型,有的人可能會理解成out 也算是返回值。
3、調用方式:函數 select my_fun() ;過程 call my_pro( ) ;

⑩ mysql存儲過程的基本用法有哪些

mysql存儲過程的基本用法有哪些
在外部程序訪問資料庫時(例如 php),要組織很多 sql 語句。

特別是業務邏輯復雜的時候,一大堆的 sql 和條件夾雜在 php 代碼中,讓人不寒而慄。現在有了 mysql 存儲過程,業務邏輯可以封裝存儲過程中,這樣不僅容易維護,而且執行效率也高。

一、mysql 創建存儲過程

"pr_add" 是個簡單的 mysql 存儲過程,這個mysql 存儲過程有兩個 int 類型的輸入參數 "a"、"b",返回這兩個參數的和。
復制代碼 代碼如下:
drop procere if exists pr_add;

計算兩個數之和
復制代碼 代碼如下:
create procere pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a b;
select c as sum;
/*
return c;
不能在 mysql 存儲過程中使用。return 只能出現在函數中。

*/
end;

二、調用 mysql 存儲過程
復制代碼 代碼如下:
call pr_add(10, 20);

執行 mysql 存儲過程,存儲過程參數為 mysql 用戶變數。
復制代碼 代碼如下:
set @a = 10;
set @b = 20;
call pr_add(@a, @b);

三、mysql 存儲過程特點

創建 mysql 存儲過程的簡單語法為:
復制代碼 代碼如下:
create procere 存儲過程名字()
(
[in|out|inout] 參數 datatype
)
begin
mysql 語句;
end;

mysql 存儲過程參數如果不顯式指定"in"、"out"、"inout",則默認為"in"。習慣上,對於是"in" 的參數,我們都不會顯式指定。

1. mysql 存儲過程名字後面的"()"是必須的,即使沒有一個參數,也需要"()"

2. mysql 存儲過程參數,不能在參數名稱前加"@",如:"@a int"。下面的創建存儲過程語法在 mysql 中是錯誤的(在 sql server 中是正確的)。 mysql 存儲過程中的變數,不需要在變數名字前加"@",雖然 mysql 客戶端用戶變數要加個"@"。
復制代碼 代碼如下:
create procere pr_add
(
@a int, -- 錯誤
b int -- 正確
)

3. mysql 存儲過程的參數不能指定默認值。

4. mysql 存儲過程不需要在 procere body 前面加 "as"。而 sql server 存儲過程必須加 "as" 關鍵字。
復制代碼 代碼如下:
create procere pr_add
(
a int,
b int
)
as -- 錯誤,mysql 不需要 "as"
begin
mysql statement ...;
end;

5. 如果 mysql 存儲過程中包含多條 mysql 語句,則需要 begin end 關鍵字。
復制代碼 代碼如下:
create procere pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;

6. mysql 存儲過程中的每條語句的末尾,都要加上分號 ";"
復制代碼 代碼如下:
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;

7. mysql 存儲過程中的注釋。
復制代碼 代碼如下:
/*
這是個
多行 mysql 注釋。
*/
declare c int; -- 這是單行 mysql 注釋 (注意 -- 後至少要有一個空格)
if a is null then # 這也是個單行 mysql 注釋
set a = 0;
end if;

熱點內容
vb資料庫數組 發布:2024-11-19 09:23:40 瀏覽:827
安卓游戲數據保存在哪裡找 發布:2024-11-19 09:22:02 瀏覽:309
解壓出來的文件亂碼 發布:2024-11-19 09:15:40 瀏覽:939
北航ftp是多少 發布:2024-11-19 09:15:32 瀏覽:821
瀏覽保存密碼如何取消 發布:2024-11-19 09:10:17 瀏覽:89
安卓怎麼關簡訊重復提醒 發布:2024-11-19 09:02:00 瀏覽:635
html與php的區別 發布:2024-11-19 09:00:53 瀏覽:193
晚安密碼多少 發布:2024-11-19 09:00:51 瀏覽:945
易語言腳本模塊 發布:2024-11-19 09:00:44 瀏覽:484
經典矩陣c語言 發布:2024-11-19 08:56:23 瀏覽:268
网站地图