1. 程式人生 > >函數的語法(標準模版)

函數的語法(標準模版)

con string reat sql 流程控制 font arch def ack

自定義函數 (user-defined function UDF)就是用一個象ABS() 或 CONCAT()這樣的固有(內建)函數一樣作用的新函數去擴展MySQL,所以UDF是對MySQL功能的一個擴展
創建和刪除自定義函數語法:

創建UDF:

  1.   CREATE [AGGREGATE] FUNCTION function_name(parameter_name type,[parameter_name type,...])
  2.   RETURNS {STRING|INTEGER|REAL}
  3.   runtime_body

簡單來說就是:

  CREATE FUNCTION 函數名稱(參數列表)
  RETURNS 返回值類型
  函數體

刪除UDF:


  DROP FUNCTION function_name

調用自定義函數語法:


  SELECT function_name(parameter_value,...)

舉幾個例子
例子1
簡單的函數
  1. CREATE FUNCTION simpleFun() RETURNS VARCHAR(20)
  2. BEGIN
  3. RETURN "Hello World!";
  4. end;
使用函數
  1. select simpleFun();


說明:
UDF可以實現的功能不止於此,UDF有兩個關鍵點,一個是參數,一個是返回值,UDF可以沒有參數,但UDF必須有且只有一個返回值

例子2

  1. CREATE TABLE son (
  2. id INT NOT NULL
    ,
  3. name VARCHAR(20),
  4. pay INTEGER
  5. );
  6. INSERT INTO son (id, name, pay) VALUES (1,‘bol‘,20);
  7. INSERT INTO son (id, name, pay) VALUES (2,‘davie‘,2220);
  8. SELECT * FROM son;
  9. DROP FUNCTION IF EXISTS deleteById;
  10. CREATE FUNCTION deleteById(uid SMALLINT UNSIGNED)
  11. RETURNS VARCHAR(20)
  12. BEGIN
  13. DELETE FROM son WHERE id = uid;
  14. RETURN
    (SELECT COUNT(id) FROM son);
  15. END
  16. select deleteById(2);
這裏我們是單步執行的,所以,我們可以不定義DELIMITER,DELIMITER的意思是定義默認的結束符號!DELIMITER // 意思是修改默認的結束符";"為"//",以後的SQL語句都要以"//"作為結尾
在函數體重我們可以使用更為復雜的語法,比如復合結構/流程控制/任何SQL語句/定義變量等等
這個函數把‘2009-06-23 00:00:00‘轉換為一個特定的字符串
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS `test`;
  3. CREATE FUNCTION `test`(gdate datetime) RETURNS varchar(255)
  4. BEGIN
  5. DECLARE x VARCHAR(255) DEFAULT ‘‘;
  6. SET x= date_format(gdate,‘%Y%m%d%h%i%s‘);
  7. RETURN x;
  8. END $$
  9. DELIMITER ;
  10. SELECT test(‘2009-06-23 00:00:00‘)


這個函數截取字符串
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS cutString ;
  3. CREATE FUNCTION cutString(s VARCHAR(255),n INT) RETURNS varchar(255)
  4. BEGIN
  5. IF(ISNULL(s)) THEN RETURN ‘‘;
  6. ELSEIF CHAR_LENGTH(s)<n THEN
  7. RETURN s;
  8. ELSEIF CHAR_LENGTH(S)=n THEN
  9. RETURN ‘相等‘;
  10. ELSE
  11. RETURN CONCAT(LEFT(s,n),‘...‘);
  12. END IF;
  13. END $$
  14. DELIMITER ;
  15. SELECT cutString(‘323432234‘,4);



函數的模版

函數的語法(標準模版)