Registriert seit: 28. Jun 2007
417 Beiträge
|
MySQL und Zeos und Stored Proc Problem
8. Mai 2008, 07:52
Datenbank: MySQL • Version: 5.1 • Zugriff über: ZEOS
Ich habe schon wieder ein Problem mit Stored Procedures.
Das hier hat funktioniert:
SQL-Code:
DELIMITER $$
DROP PROCEDURE IF EXISTS `bmm`.`sp_import_t_tepl`$$
CREATE DEFINER=`admin_bmm`@`%` PROCEDURE `bmm`.`sp_import_t_tepl`(in_id varchar(45),
in_stext varchar(45),
in_kst varchar(7),
in_anl varchar(10),
in_anr varchar(10),
in_cuser varchar(20),
in_state varchar(45))
BEGIN
DECLARE id_count int;
SELECT COUNT(id) INTO id_count FROM t_tepl
WHERE id=in_id;
IF id_count>0 THEN
UPDATE t_tepl SET stext=in_stext, kst=in_kst, anl=in_anl, anr=in_anr, clast=now(), cuser=in_cuser, state=in_state
WHERE id=in_id;
ELSE
INSERT INTO t_tepl VALUES(in_id, in_stext, in_kst, in_anl, in_anr, now(), in_cuser, in_state);
END IF;
END $$
DELIMITER ;
Jetzt habe ich ein wenig geändert.
SQL-Code:
DELIMITER $$
DROP PROCEDURE IF EXISTS `bmm`.`sp_handle_t_tepl`$$
CREATE DEFINER=`admin_bmm`@`%` PROCEDURE `bmm`.`sp_handle_t_tepl`(in_action varchar(20),
in_id varchar(45),
in_stext varchar(45),
in_kst varchar(7),
in_anl varchar(10),
in_anr varchar(10),
in_cuser varchar(20),
in_state varchar(45))
BEGIN
DECLARE id_exists int;
SELECT COUNT(id) INTO id_exists FROM t_tepl WHERE id=in_id;
CASE
-- Alle Datensätze auswählen
WHEN in_action='list_all' THEN
SELECT * FROM t_tepl;
-- Technische Plätze importieren
WHEN in_action='import' THEN
IF id_exists>0 THEN
UPDATE t_tepl SET stext=in_stext, kst=in_kst, anl=in_anl, anr=in_anr, clast=now(), cuser=in_cuser, state=in_state
WHERE id=in_id;
ELSE
INSERT INTO t_tepl VALUES(in_id, in_stext, in_kst, in_anl, in_anr, now(), in_cuser, in_state);
END IF;
END CASE;
END $$
DELIMITER ;
Ich führe die Procedure in einer Query aus.
Delphi-Quellcode:
begin
with Query do
begin
Close;
SQL.Clear;
//Aufruf einer Stored Procedure zum Importieren eines Datensatzes
//Hier wird auch geprüft, ob der DS bereits existiert und entsprechend behandelt
SQL.Add(' CALL sp_handle_t_tepl(:pACTION, :pID, :pSTEXT, :pKST, :pANL, :pANR, :pCUSER, :pSTATE);');
Params.ParamByName(' pACTION').Value := spImport;
Params.ParamByName(' pID').Value := ATP.TechnischerPlatz;
Params.ParamByName(' pSTEXT').Value := ATP.Bezeichnung;
Params.ParamByName(' pKST').Value := ATP.Kostenstelle;
Params.ParamByName(' pANL').Value := ATP.Anlage;
Params.ParamByName(' pANR').Value := ATP.ANummer;
Params.ParamByName(' pCUSER').Value := Global.EnviromentData.User;
Params.ParamByName(' pSTATE').Value := ATP.Status;
try
ExecSQL; //Hier habe ich auch schon Open versucht - das selbe Ergebnis
except
end;
end;
end;
Leider bekomme ich anschließend die Meldung:
"procedure can't return a result set in the given context"
Bei der Ausführung der sp im MySQL Query Browser funktioniert es, anscheinend aber nicht in Verbindung mit der Zeos Query. Was läuft hier nicht richtig?
|