mysql存儲過程中if
⑴ mysql建立存儲過程中如何判斷一個數字的正負並使用select輸出
CREATE PROCEDURE testproc (IN v_i integer )
BEGIN
if v_i > 0 then
select v_i as '負數';
else
select v_i as '正數';
end if;
END$$
delimiter ;
⑵ mysql 存儲過程中的 if exists 判斷問題
SELECT沒有IF EXISTS 語法,你可以用select count(*) from information_schema.tables where table_schema='your_schema' and table_name='your_tab';看返回0還是1來判斷。
⑶ 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
函數的限制
我們已經很清楚可以在存儲過程中使用的元素了。下面我要講的是前面沒有提到的函數。
⑷ mysql中要新建一個存儲過程,,if語句的判斷條件
BEGIN
IFEXISTS(select1fromrw_yzs_Staticwherepagetype=i_pagetypeandcatalogCode=i_catalogCodeandserviceCode=i_serviceCodeandserviceName=i_serviceName)THEN
updaterw_yzs_StaticsetserviceCode=i_serviceCode,serviceName=i_serviceName,zgbb=i_zgbb,sxmc=i_sxmc,cnqx=i_cnqx,sfbz=i_sfbz,dz=i_dz,bldx=i_bldx,bltj=i_bltj,sxcl=i_sxcl,ckbllc=i_ckbllc,wsbllc=i_wsbllc,blsx=i_blsx,blyj=i_blyj,bz=i_bz,updatetime=NOW()
wherepagetype=i_pagetypeandcatalogCode=i_catalogCodeandserviceCode=i_serviceCodeandserviceName=i_serviceName;
ELSE
INSERTINTOrw_yzs_Static(pagetype,divisioncode,divisionname,catalogCode,catalogName,serviceCode,serviceName,orgGroup,zgbb,sxmc,cnqx,sfbz,dz,bldx,bltj,sxcl,ckbllc,wsbllc,blsx,blyj,bz,updatetime)
VALUES(i_pagetype,i_divisioncode,i_divisionname,i_catalogCode,i_catalogName,i_serviceCode,i_serviceName,i_orgGroup,i_zgbb,i_sxmc,i_cnqx,i_sfbz,i_dz,i_bldx,i_bltj,i_sxcl,i_ckbllc,i_wsbllc,i_blsx,i_blyj,i_bz,now());
ENDIF;
END
例子與回答無關:
這里應該用case when then 這類的吧
這里給個思路,具體用法還是自己去網路吧。應該太多了這種教學。
select case 學分 when <60 then xf=0 from xscj where 學號=xh and 課程名稱 =kcmc
你里你應該新增一個變數來記錄成績的值 才能對此進行IF判斷
⑸ mysql 存儲過程 if條件 判斷變數的值是否0
mysql> DELIMITER //
mysql> CREATE PROCEDURE TestIfElse
-> (
-> p_val INT
-> )
-> BEGIN
-> IF (p_val = 1) THEN
-> SELECT '1' AS A;
-> ELSEIF (p_val = 2) THEN
-> SELECT '2' AS A;
-> ELSE
-> SELECT 'other' AS A;
-> END IF;
-> END//
Query OK, 0 rows affected (0.05 sec)
上面是一個最簡單的 mysql 的
IF / ELSEIF 的例子了...
⑹ 在MYSQL存儲過程中case語句里嵌套IF語句行嗎
你的case內的if中的 getchar()應該只執行一次,用變數保存,如case『S':改為: 在switch(in)前面加個 char ch; case 'S':printf("目前無法判斷,請輸入第二個字元!\n"); ch = getchar(); if(ch=='a') printf("Saturday."); else if (ch=='u') //...
⑺ 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;
⑻ mysql 存儲過程中if控制語句的條件判斷問題
if (@num1 < @time)
AND (@num2 < @time)
AND (@num3 < @time)
then
⑼ mysql存儲過程的if判斷有多個條件該怎麼優化效率
這個應該不會太慢吧,我建議你看一下,你是不是循環做了太多次的插入/更新操作。
mysql默認的配置中,每次事務提交都要寫binlog和redo log,如果循環太多次——比如循環插入10w條記錄——就會非常慢。一般優化思路分兩種:
1 修改 sync_binlog為一個100-1000間的值,讓binlog每隔100-1000個事務後再寫一次;修改innodb_flush_log_at_trx_commit =2; 這么搞的好處是降低了寫log的次數和消耗的時間,缺點是,中間出錯的話,會丟失一部分的binlog和redolog導致無法通過他們來在出問題是恢復生產庫數據。
2 將所有的插入/更新操作放到一個事務中進行。這樣,顯然就只需要一次寫binlong和redolog咯。