Hi,
ich habe folgende SP:
SQL-Code:
CREATE OR ALTER PROCEDURE CREATECUSTOMER (
name varchar(100),
title varchar(25),
forename varchar(50),
surname varchar(50),
street varchar(50),
houseno varchar(10),
country varchar(3),
zipcode varchar(10),
cityname varchar(50))
returns (
contactid integer)
as
declare variable entityid integer;
declare variable cityid integer;
BEGIN
SELECT cityid FROM getCityid(:zipcode,:cityname,:country) INTO :cityid;
INSERT into customer(name) VALUES (:name) RETURNING entityid INTO :entityid;
INSERT into contact (title, forename, surname, street, housenumber, cityid, entityid) VALUES (:title, :forename, :surname, :street, :houseno, :cityid, :entityid) RETURNING contactid INTO :contactid;
UPDATE customer set maincontactid = :contactid WHERE entityid=:entityid;
END
Die hat auch einwandfrei funktioniert (damals noch ohne das returns und mit contactid als Variable).
Jetzt wollte ich die ContactID zurückgeben lassen, daher das returns.
Der Zugriff von Delphi sieht so aus:
Delphi-Quellcode:
var
proc: TIBCStoredProc;
begin
proc := TIBCStoredProc.Create(nil);
proc.StoredProcName := 'CREATECUSTOMER';
proc.PrepareSQL(True);
proc.ParamByName('name').Value := custName;
proc.ParamByName('title').Value := title;
proc.ParamByName('forename').Value := forename;
proc.ParamByName('surname').Value := surname;
proc.ParamByName('street').Value := street;
proc.ParamByName('houseNo').Value := houseNo;
proc.ParamByName('country').Value := Uppercase(country);
proc.ParamByName('zipcode').Value := zipcode;
proc.ParamByName('cityname').Value := cityname;
proc.Open;
result := proc.FieldByName('contactid').AsInteger;
proc.Close;
proc.Free;
end;
Das wurde dann mit der Meldung quittiert, dass das Ganze nicht klappt, da meiner SP ein Suspend fehle.
Also habe ich vor dem letzten end noch ein suspend; spendiert.
Jetzt bekomme ich auch brav die neu generierte ID zurück (die Generatoren werden auch schön hochgezählt), aber, die neuen Einträge landen nicht mehr in der
DB.
Was mache ich falsch?
LG, Frederic