Einzelnen Beitrag anzeigen

guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#1

MySQL und Zeos und Stored Proc Problem

  Alt 8. Mai 2008, 06: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_allTHEN
    SELECT * FROM t_tepl;

-- Technische Plätze importieren
  WHEN in_action='importTHEN
    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?
  Mit Zitat antworten Zitat