返回我的存储过程的值

时间:2015-05-04 10:49:53

标签: mysql stored-procedures join

我使用存储过程来优化我的sql脚本的查询。这是一个脚本,当我执行它时更新我的​​数据库的表我没有错误,同时我没有结果。我怎样才能返回我的存储过程的值?

这是我的剧本:

        DELIMITER |

        CREATE PROCEDURE data_table1_test()

        BEGIN

        DROP TEMPORARY  TABLE IF EXISTS ch.table1;

        CREATE TEMPORARY TABLE ch.table1
        SELECT STRAIGHT_JOIN
        SOITAB.champ1 as champ1,
        CONCAT(SOITAB.champ1,' ',SOITAB.fk_champcam ) as champ1_cam,SOITAB.champup as champup,
        supM(CASE WHEN (SOITAB.fk_champsois IN (8,11,12,14,18,19,20,47,51)) THEN 1 ELSE 0 END)/COUNT(DISTINCT CSSTAB.champicss) as champqtr,
        supM(CASE WHEN (SOITAB.fk_champsois In (2,3,4,5,6,7,8,11,12,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47,51))
        THEN 1 ELSE 0 END)/COUNT(DISTINCT CSSTAB.champicss) as champqtn,
        CTAB.champidcam as champidcam,
        CTAB.champna as champna, 
        CTAB.champuk as champuk,
        CTAB.champst as champst,
        CTAB.champet as champet,
        CTAB.champiden as champiden,
        CTAB.champdeba as champdeba,
        CSTAB.champids as champids,
        CSTAB.champcat as champcat,
        CSTAB.champop as champop,
        CSTAB.champshco as champshco,
        CSTAB.champxc as champxc,
        LEFT(CSTAB.champxc,2) as champscon,
        CSTAB.champdowe as champdowe,
        CSTAB.fk_caogst as sht,
        CSTAB.pr as pr,
        CCTAB.champidcc as champidcc,
        CCTAB.champna as p_champna,
        CCTAB.champdes as pchampdes,
        CCTAB.fk_ca_br,
        MAX(LEFT(CCTAB.note,3)) AS bu,
        GROUP_CONCAT(champspn, ' by ',FORMAT(CSSTAB.qu,0)  ORDER BY champspn ASC SEPARATOR ' + ') as sup_champ1,
        supm(distinct(CSSTAB.npp*CSSTAB.qu)) AS champpfi,
        CsupTAB.champna as sup_champna,
        CsupTAB.id_champcsu as sup_id,
        CsupTAB.champiden as sup_champiden,
        CCDTAB.champidcc as champidcc,
        CCDTAB.ct1 as pct1,
        CCDTAB.ct2 as pct2,
        COUNT(distinct CSSTAB.champicss) as champseti,ch.PVGTAB.pv as pv, 
        supm(distinct(CSSTAB.npp*CSSTAB.qu)) AS npp,CHCTAB.p as p, 
        max(SOITAB.champcat) as lod

        FROM bdata.champsoit SOITAB

        LEFT OUTER JOIN bdata.champcsi CSTAB ON CSTAB.champ1 = SOITAB.champ1 
        LEFT OUTER JOIN bdata.champcam CTAB ON SOITAB.fk_champcam = CTAB.champidcam
        LEFT OUTER JOIN bdata.champcsi_set CSSTAB ON CSSTAB.fk_champcsi = CSTAB.champids
        LEFT OUTER JOIN bdata.champccco CCTAB ON CSTAB.fk_champccco = CCTAB.champidcc
        LEFT OUTER JOIN bdata.champcccohcca CCHCTAB ON CCTAB.champidcc = CCHCTAB.fk_champccco
        LEFT OUTER JOIN ch.champccde CCDTAB ON CCHCTAB.fk_c_cat= ch.CCDTAB.champidcc
        LEFT OUTER JOIN bdata.champcamhch CHCTAB ON CHCTAB.fk_champccco = CCTAB.champidcc
        LEFT OUTER JOIN ch.champpv PVGTAB on ch.PVGTAB.url = CCTAB.champidcc
        LEFT OUTER JOIN bdata.champcsu CsupTAB ON CCTAB.fk_champcsu = CsupTAB.id_champcsu

        WHERE CSTAB.champstat = 'active' AND CCTAB.champetap = 1 AND CCHCTAB.is_primary = '1'
        GROUP BY SOITAB.champ1,SOITAB.fk_champcam;

        END |
        DELIMITER;


        #####################champpgrte###############################################

        DELIMITER |
        CREATE PROCEDURE data_table2_test()
        BEGIN

        DROP TEMPORARY TABLE IF EXISTS ch.table2;
        CREATE TEMPORARY TABLE ch.table2

        SELECT STRAIGHT_JOIN

        champspete.champ1,
        supM(champspete.champqtn) as champqtn ,
        supM(champspete.champqtr) as champqtr, 
        count(distinct champspete.campaign_id) as champscam, 
        champspete.sup_champna, 
        champspete.lod

        FROM ch.champspete 

        GROUP BY ch.champspete.champ1;
        ALTER TABLE ch.champpgrte ADD INDEX (champ1);
        END |
        DELIMITER ;

1 个答案:

答案 0 :(得分:0)

您可以在程序中使用OUT参数。

DELIMITER $$
CREATE PROCEDURE CountOrderByStatus(
 IN orderStatus VARCHAR(25),
 OUT total INT)
BEGIN
 SELECT count(orderNumber)
 INTO total
 FROM orders
 WHERE status = orderStatus;
END$$
DELIMITER ;

致电程序

CALL CountOrderByStatus('Shipped',@total);
SELECT @total;