程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 讀書筆記-MySQL存儲過程-變量

讀書筆記-MySQL存儲過程-變量

編輯:MySQL綜合教程

DECLARE語句允許我們創建變量。它將出現在代碼塊中任何游標和處理及任何過程語句聲明之前,DECLARE語句的語法如下:

常用的MySQL數據類型

數據類型 解釋 相應值的示例 INT,INTEGER 32位整數。取值范圍為-21億到+21億,如果是非符號數值可以達到42億,但這樣做就不能包擴負數 123,345,-2,000,000,000 BIGINT 64位整數。取值范圍為-9萬億到+9萬億或者非負的0到18萬億 9,000,000,000,000,000,000 FLOAT 32位浮點數。取值范圍為-1.7e38to1.7e38或者非負的0到3.4e38 0.000000000000002,17897.890790,-345.8908770,1.7e21 DOUBLE 64位浮點數。取值范圍接近無限(1.7e308) 1.765e23,-1.765e100

DECIMAL(precision,scale)

NUMERIC(precision, scale)

定點數。存儲情況取決於precision,能保存可能出現的數字范圍。NUMERIC通常用來保存重要的十進制數,例如現金 78979.00,-87.50,9.95 DATE 日期類型,沒有詳述時間 '1999-12-31' DATETIME 日期和時間,時間精確到秒 '1999-12-31 23:59:59' CHAR(length) 定長字符串。值會被空白填充至指定長度,最大長度為255字節 'hello world' VARCHAR(length) 最大長度為64K的可變字符串 'hello world' BLOB,TEXT 最大64K長度,BLOB用來保存2進制數據,TEXT用來保存文本數據 任何想象的內容 LONGBLOB,LONGTEXT BLOB和TEXT的加長版本,存儲能力達4GB 任何想象的內容,但比BLOB和TEXT能存放更大的長度

DECLARE l_int1            int default -2000000
DECLARE l_int2            INT unsigned 4000000
DECLARE l_bigint1         BIGINT DEFAULT 4000000000000000     
DECLARE l_float           FLOAT DEFAULT 1.8e8
DECLARE l_double          DOUBLE DEFAULT 2e45
DECLARE l_numeric         NUMERIC(8,2) DEFAULT 9.95;

DECLARE l_date            DATE DEFAULT '1999-12-31'
DECLARE l_datetime        DATETIME DEFAULT '1999-12-31 23:59:59'

DECLARE l_char            CHAR(255) DEFAULT 'This will be padded to 255 chars';
DECLARE l_varchar         VARCHAR(255) DEFAULT 'This will not be padded'

DECLARE l_text            TEXT DEFAULT 'This is a really long string. In sored programs we can use text colums fairly freely, but
                           in tables there are some limiations regarding indexing and use in various expressions.'
  

字面常量

下面是三大基本字面量類型

數字字面常量,十六進制的傳統表示方法,在它前面加上'0x'。

日期字面變量

字符字面變量

變量命名規則

參數

IN除非被具體定義,否則參數都假定IN屬性。這意味著他們的值必須被主叫程序所指定,並且任何在存儲程序內部對該參數的修改都不能在主叫程序中起作用

OUT 當存儲程序開始時,任何OUT變量的值都被賦值為NULL,不管這個值在主叫程序中是否被賦予其他值。

CREATE PROCEDURE sp_demo_in_parameter(IN p_in INT)
BEGIN
    /*We can see the value of the IN parameter*/
    SELECT p_in;
    /*We can modify it */
    SET p_in = 2;
    /* show that the modification took effect */
    select p_in;
END;

/*This output shows that the changes made within the stored program cannot be accessed from the calling program(in this case, the mysql client):*/

set @p_in = 1
call sp_demo_in_parameter(@p_in)

select @p_in, 'We can''t see the changed value from the calling program'


OUT參數的例子

CREATE PROCEDURE sp_demo_out_parameter(OUT p_out INT)
BEGIN
    /*We can't see the value of the OUT parameter*/
    SELECT p_out, 'We can''t see the value of the OUT parameter';
    /*We can modify it */
    SET p_out = 2;
    SELECT p_out, 'OUT parameter value has been  changed';

END;

SET @p_out = 1

CALL sp_demo_out_parameter(@p_out)
SELECT @p_out, "Calling program can see the value of the changed OUT parameter"


INOUT參數的例子

CREATE PROCEDURE sp_demo_inout_parameter(INOUT p_inout INT)
BEGIN
    SELECT p_inout, 'We can see the value of the INOUT parameter in the stored program';

    SET p_inout = 2;
    SELECT p_inout, 'INOUT parameter value has been changed';
END;
set @p_inout = 1
call sp_demo_inout_parameter(@p_inout)
select @p_inout, "Calling program can see the value of the changed INOUT parameter"

用戶變量

用於變量是在MySQL中被定義並且可以在存儲程序中或存儲程序之外被操作的變量。有兩種方法是用用戶變量:

1、因為用戶變量具有獨立於存儲程序個體的作用域,可以用來描述能夠被任何存儲程序所讀寫的會話。

2、用戶變量可以給方法傳遞參數以第二種選擇,存儲程序對用戶變量具有讀寫權限,這樣可以避免使用參數傳值造成的不方便。

用戶變量可以被MySQL命令行客戶端從任何程序創建並操縱。來確保MySQL語句使用SET語句。

SELECT 'Hello World' into @x;
SET @y = 'Goodbye Cruel World';
SELECT @y;
SET @z = 1+2+3;
SELECT @z;

使用用戶變量在主叫程序和被叫程序之間傳遞信息

CREATE PROCEDURE GreetWorld()
SELECT CONCAT(@greeting, ' World');
SET @greeting = 'Hello';
CALL GreetWorld);


把用戶變量當成全局變量交叉使用

CREATE PROCEDURE p1()

SET @last_procedure = 'p1';

CREATE PROCEDURE p2()

SELECT CONCAT('Last procedure was ', @last_procedure);

CALL p1();

CALL p2();

注釋

MySQL存儲過程支持兩種不同風格的注釋:

1、兩個連字符跟上一個空格,創建了一個到當前行末的注釋

2、C語言風格的注釋,用/*開始,以*/結束。我們稱它為多行注釋

操作符

MySQL包括大家在大多數語言中早已熟識的操作符,但是C風格的操作符(++, += )並不支持。

CREATE PROCEDUREoperators()

BEGIN 

    DECLARE a int default 2;

    DECLARE b int default 3;

    DECLARE c FLOAT;



    SET c = a + b; SELECT 'a+b=', c;

    SET c = a/b;    SELECT  'a/b=', c;

    SET c = a*b;   SELECT 'a*b=', c;

    IF (a < b) THEN 

        SELECT 'a is less than b';

    END IF;

    IF NOT (a=b) THEN

        SELECT 'a is not equal to b';

    END IF;

END; 


						

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved