sql server和mysql變數賦值的區別 以及 MySql Declare

來源:互聯網
上載者:User
文章目錄
  • 20.2.8. DECLARE語句

sql server和mysql都是我們經常用到的資料庫系統,下面就為您介紹sql server和mysql變數賦值的區別,希望對您能有所啟迪。

sql server中變數要先申明後賦值:

局部變數用一個@標識,全域變數用兩個@(常用的全域變數一般都是已經定義好的);

申明局部變數文法:declare @變數名 資料類型;例如:declare @num int;

賦值:有兩種方法式(@num為變數名,value為值)

set @num=value;   或   select @num=value;

如果想擷取查詢語句中的一個欄位值可以用select給變數賦值,如下:

select @num=欄位名 from 表名 where ……

mysql變數賦值不用事前申明,在用的時候直接用“@變數名”使用就可以了。

第一種用法:set @num=1; 或set @num:=1; //這裡要使用變數來儲存資料,直接使用@num變數

第二種用法:select @num:=1; 或 select @num:=欄位名 from 表名 where …… (張英:似乎mysql中不能使用 select @p1 := c1, @p2:=c2 from tb 方式賦值)

注意上面兩種賦值符號,使用set時可以用“=”或“:=”,但是使用select時必須用“:=賦值”

mysql可以在SP中聲明不帶@的局部變數,具體見declare。

 

Declare

 

20.2.8. DECLARE語句

DECLARE語句被用來把不同項目局域到一個 子程式:局部變數(請參閱20.2.9節,“儲存程式中的變數”),條件和 處理常式(請參閱20.2.10節,“條件和處理常式”) 及游標(請參閱20.2.11節,“游標”)。SIGNAL和RESIGNAL語句當前還不被支援。

DECLARE僅被用在BEGIN ... END複合陳述式裡,並且必須在複合陳述式的開頭,在任何其它語句之前。

游標必須在聲明處理常式之前被聲明,並且變數和條件必須在聲明游標或處理常式之前被聲明。

20.2.9. 儲存程式中的變數

20.2.9.1. DECLARE局部變數

20.2.9.2. 變數SET語句

20.2.9.3. SELECT ... INTO語句

你可以在子程式中聲明並使用變數。

20.2.9.1. DECLARE局部變數

DECLARE var_name[,...] type [DEFAULT value]

這個語句被用來聲明局部變數。要給變數提供一個預設值,請包含一個DEFAULT子句。值可以被指定為一個運算式,不需要為一個常數。如果沒有DEFAULT子句,初始值為NULL。

局部變數的作用範圍在它被聲明的BEGIN ... END塊內。它可以被用在嵌套的塊中,除了那些用相同名字 聲明變數的塊。

20.2.9.2. 變數SET語句

SET var_name = expr [, var_name = expr] ...

在儲存程式中的SET語句是一般SET語句的擴充版本。被參考變數可能是子程式內聲明的變數,或者是全域伺服器變數。

在儲存程式中的SET語句作為預先存在的SET文法的一部分來實現。這允許SET a=x, b=y, ...這樣的擴充文法。其中不同的變數類型(局域 聲明變數及全域和集體變數)可以被混合起來。這也允許把局部變數和一些只對系統變數有意義的選項合并起來。在那種情況下,此選項被識別,但是被忽略了。

20.2.9.3. SELECT ... INTO語句

SELECT col_name[,...] INTO var_name[,...] table_expr

這個SELECT文法把選定的列直接儲存到變數。因此,只有單一的行可以被取回。

SELECT id,data INTO x,y FROM test.t1 LIMIT 1;

注意,使用者變數名在MySQL 5.1中是對大小寫不敏感的。請參閱9.3節,“使用者變數”。

重要: SQL變數名不能和列名一樣。如果SELECT ... INTO這樣的SQL語句包含一個對列的參考,並包含一個與列相同名字的 局部變數,MySQL當前把參考解釋為一個變數的名字。例如,在下面的語句中,xname 被解釋為到xname variable 的參考而不是到xname column的:

CREATE PROCEDURE sp1 (x VARCHAR(5))
 BEGIN
    DECLARE xname VARCHAR(5) DEFAULT 'bob';
    DECLARE newname VARCHAR(5);
    DECLARE xid INT;
    
    SELECT xname,id INTO newname,xid 
      FROM table1 WHERE xname = xname;
    SELECT newname;
 END;

當這個程式被調用的時候,無論table.xname列的值是什麼,變數newname將傳回值‘bob’。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.