[英]Different result between stored procedure and query execution
我正在嘗試使用Navicat在mysql中執行存儲過程,當我執行該存儲過程時,我得到了0行,但是當我執行存儲過程的一部分時,我卻得到了1行。 存儲過程是這樣的:
BEGIN
#Routine body goes here...
IF @autor=0 THEN
SELECT DISTINCT bdocus.ano_pub
FROM bdocus INNER JOIN
descriptores_bdocus ON bdocus.nserie = descriptores_bdocus.nserie INNER JOIN
descriptores ON descriptores_bdocus.iddescriptor = descriptores.id
WHERE (bdocus.descriptores LIKE '%Victimización%')AND(bdocus.ano_pub LIKE CONCAT(@anyo,'%')) AND (bdocus.codigo_area LIKE CONCAT(@tema,'%')) AND(bdocus.codigo_colectivo LIKE CONCAT(@colectivo,'%')) AND (descriptores.nombre = @descriptores)
GROUP BY bdocus.ano_pub
ORDER BY bdocus.ano_pub DESC;
ELSE
SELECT DISTINCT bdocus.ano_pub
FROM bdocus INNER JOIN
descriptores_bdocus ON bdocus.nserie = descriptores_bdocus.nserie INNER JOIN
descriptores ON descriptores_bdocus.iddescriptor = descriptores.id INNER JOIN
autores_bdocus ON bdocus.nserie = autores_bdocus.nserie
WHERE (bdocus.descriptores LIKE '%Victimización%') AND (autores_bdocus.idautor = @autor) AND(bdocus.ano_pub LIKE CONCAT(@anyo,'%')) AND (bdocus.codigo_area LIKE CONCAT(@tema,'%')) AND(bdocus.codigo_colectivo LIKE CONCAT(@colectivo,'%')) AND (descriptores.nombre = @descriptores)
GROUP BY bdocus.ano_pub
ORDER BY bdocus.ano_pub DESC;
END IF;
END
參數是這樣的:
IN `@anyo` varchar(20),IN `@tema` varchar(20),IN `@autor` int,
IN `@colectivo` varchar(30),IN `@descriptores` varchar(40)
我想要的值是@anyo='2013'
, @anyo='2013'
@tema='%'
, @autor=44439
, @autor=44439
@colectivo='%'
以及@descriptores='Violencia sexual'
。
當我運行存儲過程的第二部分時,我的意思是:
SELECT DISTINCT bdocus.ano_pub
FROM bdocus INNER JOIN
descriptores_bdocus ON bdocus.nserie = descriptores_bdocus.nserie INNER JOIN
descriptores ON descriptores_bdocus.iddescriptor = descriptores.id INNER JOIN
autores_bdocus ON bdocus.nserie = autores_bdocus.nserie
WHERE (bdocus.descriptores LIKE '%Victimización%') AND (autores_bdocus.idautor = 44439) AND(bdocus.ano_pub LIKE CONCAT('%','%')) AND (bdocus.codigo_area LIKE CONCAT('%','%')) AND(bdocus.codigo_colectivo LIKE CONCAT('%','%')) AND (descriptores.nombre = 'Violencia sexual')
GROUP BY bdocus.ano_pub
ORDER BY bdocus.ano_pub DESC;
結果是我得到了想要的值。 那么區別在哪里? 提前致謝。
我認為您由於條件而沒有得到結果,我的意思是,您的程序不會進入“其他”部分,因此您沒有得到結果。 您可以做的是嘗試分別運行第一個選擇
SELECT DISTINCT bdocus.ano_pub
FROM bdocus INNER JOIN
descriptores_bdocus ON bdocus.nserie = descriptores_bdocus.nserie INNER JOIN
descriptores ON descriptores_bdocus.iddescriptor = descriptores.id
WHERE (bdocus.descriptores LIKE '%Victimización%')AND(bdocus.ano_pub LIKE CONCAT(@anyo,'%')) AND (bdocus.codigo_area LIKE CONCAT(@tema,'%')) AND(bdocus.codigo_colectivo LIKE CONCAT(@colectivo,'%')) AND (descriptores.nombre = @descriptores)
GROUP BY bdocus.ano_pub
ORDER BY bdocus.ano_pub DESC;
只是看是否與整個過程的結果相同,並且如果您獲得0行(如在運行該過程時),則可能是原因。 嘗試更改條件,以便首先檢查第一個選擇(這是我最需要的一個),然后再選擇另一個。
應該是這樣的
-- see that i changed the condition
IF @autor != 0 THEN
SELECT DISTINCT bdocus.ano_pub
FROM bdocus INNER JOIN
descriptores_bdocus ON bdocus.nserie = descriptores_bdocus.nserie INNER JOIN
descriptores ON descriptores_bdocus.iddescriptor = descriptores.id INNER JOIN
autores_bdocus ON bdocus.nserie = autores_bdocus.nserie
WHERE (bdocus.descriptores LIKE '%Victimización%') AND (autores_bdocus.idautor = @autor) AND(bdocus.ano_pub LIKE CONCAT(@anyo,'%')) AND (bdocus.codigo_area LIKE CONCAT(@tema,'%')) AND(bdocus.codigo_colectivo LIKE CONCAT(@colectivo,'%')) AND (descriptores.nombre = @descriptores)
GROUP BY bdocus.ano_pub
ORDER BY bdocus.ano_pub DESC;
END IF;
ELSE
SELECT DISTINCT bdocus.ano_pub
FROM bdocus INNER JOIN
descriptores_bdocus ON bdocus.nserie = descriptores_bdocus.nserie INNER JOIN
descriptores ON descriptores_bdocus.iddescriptor = descriptores.id
WHERE (bdocus.descriptores LIKE '%Victimización%')AND(bdocus.ano_pub LIKE CONCAT(@anyo,'%')) AND (bdocus.codigo_area LIKE CONCAT(@tema,'%')) AND(bdocus.codigo_colectivo LIKE CONCAT(@colectivo,'%')) AND (descriptores.nombre = @descriptores)
GROUP BY bdocus.ano_pub
ORDER BY bdocus.ano_pub DESC;
END
嘗試一下,告訴我它進行的如何,它可能是調用過程時要放入的參數
指出9.4之間的區別很重要。 用戶定義的變量和例程參數13.1.15。 CREATE PROCEDURE和CREATE FUNCTION語法是不同的變量。
在您的示例中, `@anyo`
@anyo
可能為NULL
並且將`@anyo`
分配給'2013'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.