2016-05-25 51 views
1

我需要一個存儲功能:如何利用變量對功能

這是我的代碼

SELECT count(Dominio) FROM Thogar WHERE DOMINIO='%' 

我需要一個存儲功能,我會寫之間的信( U,C,R),並且該函數將用前面的代碼替換選定的字母。

我該怎麼辦?謝謝!

得到它的工作

CREATE FUNCTION `Buscar`(`param` CHAR(1)) 
    RETURNS INT 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
    DECLARE res INT; 
    SELECT count(Dominio) INTO res FROM Thogar WHERE DOMINIO=param; 
    RETURN res; 
END 

    Call buscar('C') 
+0

你能否詳細說明寫UCR之間的leteer,我對用戶輸入 – EoinS

+0

功能的選項回答我會嘗試: 據我所知,您使用的呼叫命令來啓動功能,這樣 CALL simpleproc(@a); 我需要創建一個函數,我可以說什麼字母我想要在代碼中使用的函數 例如,我調用函數;調用函數(C) 所以這個函數會做這個查詢; SELECT count(Dominio)FROM Thogar WHERE DOMINIO ='C' –

回答

1

這應該工作:

DROP FUNCTION IF EXISTS myFunc; 
DELIMITER $$ 
CREATE FUNCTION myFunc(
    param CHAR(1) 
) RETURNS INT; 
BEGIN 
    DECLARE res INT; 
    SELECT count(Dominio) INTO res FROM Thogar WHERE DOMINIO=param; 
    RETURN res; 
END; 
$$ 
DELIMITER ; 
+0

我明白了!隨着你的幫助和海蒂軟件玩,謝謝! –

0

如果你想使存儲功能只有一個SQL查詢, 我沒有看到它的任何正常的原因。

它不會給你的表現收益。

如何簡化?

您可以創建視圖:

CREATE VIEW v_dominio_counters AS 
SELECT Dominio, count(Dominio) AS counter FROM Thogar GROUP BY Dominio 

,然後使用它:

SELECT counter FROM v_dominio_counters WHERE Dominio = 'U' LIMIT 1; 

它將始終保持爲您準備好使用計數器時,有巨大的表更是得心應手。