mysql 儲存過程, 變數定義等。
convert Cast函式
兩者具體的語法如下:
Cast(value as type); Convert(value ,type);
type不是都可以滴,可以轉換的type如下:
二進位制,同帶binary字首的效果 : BINARY
字元型,可帶引數 : CHAR()
日期 : DATE
時間: TIME
日期時間型 : DATETIME
浮點數 : DECIMAL
整數 : SIGNED
無符號整數 : UNSIGNED
儲存過程寫法例項
在mysql客戶端定義儲存過程的時候使用delimiter命令來把語句定界符從;變為//。 當使用delimiter命令時,你應該避免使用反斜槓(‘"’)字元,因為那是MySQL的轉義字元。 delimiter // //
如果需要傳遞引數 則如此
create procedure test3(IN id int, OUT pname varchar(10))
begin
select user_name into pname from test where id = id;
end
delimiter // drop PROCEDURE if EXISTS update_error_stock; CREATE PROCEDURE update_error_stock() BEGIN /*遊標取完後的標識變數done_cursor置為1 */ DECLARE done_cursor INT DEFAULT 0 ; DECLARE goods_id_temp, order_sum_number,stock_sum_number INT; /*所有已經付款的商品的id號*/ DECLARE cur1 CURSOR FOR (SELECT distinct og.goods_id FROM ecs_order_info as of inner join ecs_order_goods as og on of.order_id =og.order_id where of.pay_status=2); /*遊標宣告必須在HANDLER之前 */ DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_cursor=1; /*mysql中變數沒有事前申明 使用set 可以用:= = 使用 select賦值必須 := convert((
[email protected]_sum_number),SIGNED); */ /*迴圈取值 更新庫存*/ OPEN cur1; REPEAT FETCH cur1 INTO goods_id_temp; SELECT sum(og.goods_number) into order_sum_number FROM ecs_order_info as of inner join ecs_order_goods as og on of.order_id =og.order_id where of.pay_status=2 and og.goods_id=goods_id_temp; SELECT convert((500-order_sum_number),SIGNED) INTO stock_sum_number ; update ecs_goods set goods_number=stock_sum_number where goods_id=goods_id_temp and goods_number > 500; set order_sum_number=0; set stock_sum_number=0; UNTIL done_cursor END REPEAT; CLOSE cur1; END // call update_error_stock;
PROCEDURE 2 來自 mysql 手冊
drop PROCEDURE if EXISTS curdemo;
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a CHAR(16);
DECLARE b,c INT;
DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
DECLARE cur2 CURSOR FOR SELECT i FROM t2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
OPEN cur2;
REPEAT
FETCH cur1 INTO a, b;
FETCH cur2 INTO c;
IF NOT done THEN
IF b < c THEN
INSERT INTO t3 VALUES (a,b);
ELSE
INSERT INTO t3 VALUES (a,c);
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
CLOSE cur2;
END;
call curdemo;
mysql 變數定義 (轉)
在select中,發現有一個使用者變數,如果沒有定義,那麼就會初始化。select子句原來的方式根本不受到影響。只是增加了使用者變數。所以,還是按照原來的方式使用select子句。那麼像:select sum(amount) from penalties。增加變數就成了:select @VAR:=sum(amount) from penalties。將sum(amount)的結果賦給變數@VAR:。變數前面有select,那使用者麼就是顯示該變量了。
mysql變數的術語分類:
1.使用者變數:以"@"開始,形式為"@變數名"
使用者變數跟mysql客戶端是繫結的,設定的變數,只對當前使用者使用的客戶端生效
2.全域性變數:定義時,以如下兩種形式出現,set GLOBAL 變數名 或者 set @@global.變數名
3.會話變數:只對連線的客戶端有效。
4.區域性變數:作用範圍在begin到end語句塊之間。在該語句塊裡設定的變數
declare語句專門用於定義區域性變數。set語句是設定不同型別的變數,包括會話變數和全域性變數
相關推薦
mysql 儲存過程, 變數定義等。
convert Cast函式 兩者具體的語法如下: Cast(value as type); Convert(value ,type); type不是都可以滴,可以轉換的type如下: 二進位制,同帶binary字首的效果 : BINARY 字元型,可帶引數
SQL語句優化,索引,檢視,觸發器,儲存過程,函式等。
一,SQL優化 主要解決海量資料操作時的全表搜尋,所以減少不必要的全表搜尋是SQL優化的主要目的,下面總結一下常用的優化有哪些: 1,避免在where條件中使用!=或者<>,這樣會是的查詢放棄索引而進行全域性掃描
mysql儲存過程、檢視等的許可權問題
看儲存過程定義,DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PROCEDURE `DB_U1`.`P1`() /*LANGUAGE SQL | [NOT] DETE
MySQL儲存過程中declare和set定義變數的區別
在儲存過程中常看到declare定義的變數和@set定義的變數。簡單的來說,declare定義的類似是區域性變數,@set定義的類似全域性變數。 1、declare定義的變數類似java類中的區域性變數,僅在類中生效。即只在儲存過程中的begin和end之間生效。 2
mysql儲存過程中 declare 和 set 定義變數的區別
mysql儲存過程中,定義變數有兩種方式: 1.使用set或select直接賦值,變數名以 @ 開頭. 例如:set @var=1; 可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。 2.以 DECLARE 關鍵字宣告的變數,只能在儲存過程中使用,稱為儲存過
MySQL儲存過程中,定義變數有兩種方式
MySQL儲存過程中,定義變數有兩種方式: 1.使用set或select直接賦值,變數名以 @ 開頭. 例如:set @var=1; 可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。
Mysql儲存過程2:變量定義與參數傳遞
變量定義 color ted lec mysq 傳遞 參數傳遞 fault 可選 #儲存過程 中的變量定義 declare 變量名 類型 可選類型 -- 跟建表差不多 create procedure p() begin declare age int de
MySQL-儲存過程程式碼筆記-in、out、inout、declare區域性變數和if...else語句
mysql> use test; Database changed mysql> show tables; Empty set (0.00 sec) mysql> use test; Database changed mysql> create table testA
mybaties呼叫mysql儲存過程。儲存過程返回多個select結果集。
先看需求,直接上圖 從圖中看出,需要12條普通的SELECT語句,所以就放到儲存過程中 儲存過程如下: DROP PROCEDURE IF EXISTS proc_report; DELIMITER $ CREATE PROCEDURE proc_report( OUT d_norma
mysql儲存過程判斷不為空和不為空,查詢結果賦值變數
直接看例子,判斷為空是is null delimiter // create procedure proc__pre_activity_scan() begin declare p_tid int(10); set @p_tid=(select tid fro
MySQL儲存過程(格式,變數,引數,流程控制...)
儲存過程 其實就是mysql語句組成的指令碼,也就是資料庫中儲存的一系列SQL命令的集合。 可以使用變數,條件判斷,流程控制等 優點 提高效能 減輕網路負擔 可以防止對錶的直接訪問 避免重複編寫SQL操作
mysql儲存過程中使用select count(*) into 變數名 from +表+ where條件的用法
select count(*) into v_count from dual where userid=2;此語句的意思就是根據where條件查詢dual表,得到的行數存入變數v_count中(給變數賦值) 只能在儲存過程中編寫這樣的語句?如果在mysql的sql語句中編寫
mysql儲存過程查詢結果迴圈遍歷 判斷 賦值 遊標等基本操作
一、首先說下本篇部落格所實現功能的背景和功能是怎樣的: 背景:因為公司專案開始遷移新平臺專案,所以以前的平臺老資料以及訂單資訊需要拆分表,而且需要業務邏輯來分析以前的訂單表,來拆分成另外的幾個新表,包括增加新的流水分析,以及更新其他使用者或者商家的餘額以及對賬
mysql儲存過程+遊標迴圈遍歷 判斷 賦值 等例項一
CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`() BEGIN DECLARE my_recommended INT; DECLARE my_id INT; DECLARE inviteRelationStr VARCHAR(10000)
MySQL儲存過程/儲存過程與自定義函式的區別
儲存過程:簡單的說,就是一組SQL語句集,功能強大,可以實現一些比較複雜的邏輯功能,類似於JAVA語言中的方法;ps:儲存過程跟觸發器有點類似,都是一組SQL集,但是儲存過程是主動呼叫的,且功能比觸發器更加強大,觸發器是某件事觸發後自動呼叫;有哪些特性:有輸入輸出引數,可以宣
mysql儲存過程之變數(建立(DECLARE)和賦值(SET))
我們都知道,變數是一個命名資料物件,變數的值可以在儲存過程執行期間更改。我們接下來就嘗試使用儲存過程中的變數來儲存直接/間接結果。 這些變數是儲存過程的本地變數,但是我們得注意,變數必須先聲明後
mysql儲存過程定義者
1.執行update mysql.proc set DEFINER='[email protected]%'WHERE NAME='p_update_rim_batch_log'AND db='otherdataonline';NAME:函式名字、不填所有的DB:所
mysql儲存過程簡單例項 變數賦值 遊標遍歷
應用場景: 有兩張表,學生表和對應的各科成績表。 學生表student 欄位:id int, name varchar(20)數值: 1 A 2 B 成績表score 欄
解決 mysql 儲存過程查詢資料方式是變數拼接表名的寫法
需求: 用儲存過程查詢動態表名的資料 遇到問題: 查詢語句 from後面不能直接用引數查詢 MYSQL不支援直接使用變數做表名,會把引數名當做表名查詢,報錯 解決方法: 把查詢語句和變數通過concat連線付給變數。通過執行變數來執行此語句 sql程式碼: