2011-01-07 12 views
0

Ich habe zahlreiche Threads in der Nähe gefunden, aber meine Frage nicht genau beantworten, so hier geht.Auswählen von Stored Procedure-Wert in Abfrage in MySQL

Ich schreibe einen Bericht, der eine Variable verwenden muss, die ich als eines der SELECT-Felder deklariert habe. Hier

ist der Laden-Prozedur-Code: DROP PROCEDURE IF EXISTS sp_test

CREATE PROCEDURE `sp_Test`(facilityId INT, startDate DATE, endDate DATE) 
BEGIN 

DECLARE facilityName VARCHAR(256); 

SELECT facility_name INTO facilityName FROM `reporting`.`facilities` WHERE `reporting`.`facilities`.facility_id = facilityId; 

SELECT `reporting`.`error_stratification`.description AS Stratification, facilityName 
...Rest of query that is not important 

END 

Das einzige Problem ist, dass es die Zeichenfolge "facilityName" in meiner Abfrage-Ergebnisse nicht der Wert ausdrückt.

Gibt es eine Möglichkeit, es zu zwingen, den Wert dort auszugeben?

Antwort

1

i Ihren Code eines wenig aufgeräumt - die im Anschluss an einen guten Ausgang bieten sollte Punkt, von dem Sie fortfahren können ...

drop procedure if exists sp_test; 

delimiter # 

create procedure sp_test(
in p_facility_id int unsigned, -- p prefix = parameter 
in p_start_date date, 
in p_end_date date 
) 
begin 

declare v_facility_name varchar(255) default null; -- v prefix = variable 

select f.facility_name into v_facility_name from facilities f where 
f.facility_id = p_facility_id limit 1; 

select f.*, upper(v_facility_name) as facility_name from facilities f; 

end# 

delimiter ; 

call sp_test (1, curdate() - interval 1 month, curdate()); 
+1

Die Verwendung einer Aggregatfunktion scheint das Problem behoben zu haben. Ich bin mir nicht sicher, ob das ein Bug in MySQL ist oder was, aber ich habe es in das Support-Team geschickt und um eine Klärung gebeten, ohne dass es ein Wort gibt. Danke für die Hilfe! – Khirok

0

Ich denke, Sie müssen in die Grundlagen der gespeicherten Prozeduren von MySQL schauen.

http://www.brainbell.com/tutorials/MySQL/Using_Stored_Procedures.htm dies wird Ihnen helfen.

+0

Ich sehe nichts darin bezüglich, was ich doin bin g außer einer SELECT INTO-Anweisung. Ich habe auch die ursprüngliche Frage aktualisiert, die die Struktur meiner gespeicherten Prozedur zeigt, um jede mögliche Verwirrung darauf zu beheben. – Khirok

0

Sie definieren nicht wirklich Variablen innerhalb der gespeicherten Prozedur. Sie definieren sie innerhalb des BEGIN/END-Blocks.

Auch könnte hilfreich für Sie sein, je nachdem, was Sie zu tun versuchen:

+0

Sorry sollte geklärt haben, dass es sich innerhalb des BEGIN/END-Blocks der gespeicherten Prozedur befindet. – Khirok

+0

Ich habe auch versucht, auch benutzerdefinierte Variablen zu verwenden, aber in einer gespeicherten Prozedur behandelt es die Anweisung, die folgendes enthält: = als String, so dass ich (@facName: = facility_name) string von einer SELECT-Anweisung bekomme. – Khirok

+0

Ich habe auch die Frage aktualisiert, um die gesamte Struktur des gespeicherten Proc anzuzeigen, um den BEGIN/END-Block anzuzeigen. – Khirok

Verwandte Themen