Firebird und gespeicherte Prozeduren: wenn es existiert, dann, sonst
Ich versuche zum erstellen einer gespeicherten Prozedur für firebird 2.1 (dies ist die version, die verwendet werden)
Aber bin immer ein wenig stecken, so dass jede Hilfe wird sehr geschätzt.
Die endgültige version sollte vergleichen, 4 Werte gegen den Tisch, und retreive entweder die primaryid, wenn der Wert vorhanden ist, oder erstellen Sie den neuen Eintrag in die Tabelle, und die Rückkehr der neuen primaryid.
Aber ich stecken mit nur einem Wert-lookup, und es auch nicht mithilfe der Variablen noch.
SET TERM ^ ;
CREATE PROCEDURE TESTSP
( A Varchar(64) )
RETURNS
( RESULT Integer )
AS
BEGIN
IF (EXISTS (SELECT PRIMARYID FROM TABLENAME WHERE FIELD = 'Some string')) then
SELECT PRIMARYID FROM TABLENAME WHERE FIELD = 'Some string' into :primaryid;
result = PRIMARYID;
ELSE
INSERT INTO TABLENAME (FIELD) VALUES ('Some string');
result = gen_id(GEN_TABLEID, 0);
END^
SET TERM ; ^
Bekomme ich ein "Token unknown" für den Else-Befehl.
Update nach Antworten:
Jetzt will ich mit der 4-Variablen und-Rückgabe der 4 Ergebnisse.
Ich glaube, ich brauche eine for-Schleife zu tun, sondern mit firebird, die für die Funktion bedeutet etwas anderes.
Was wäre also der Weg zu gehen?
SET TERM ^ ;
CREATE PROCEDURE TESTSP
( value1 Varchar(64) )
RETURNS
( RESULT1 Integer )
AS
BEGIN
IF (EXISTS (SELECT PRIMARYID FROM TABLENAME WHERE FIELD = :value1)) then
SELECT PRIMARYID FROM TABLENAME WHERE FIELD = value1 into :result1;
ELSE BEGIN
result1 = gen_id(GEN_TABLEID, 1);
INSERT INTO TABLENAME (PRIMARYID, FIELD) VALUES (:result1, :value1);
END
suspend;
END^
SET TERM ; ^
InformationsquelleAutor Giancarlo | 2013-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Tico schon beantwortet, die Sie haben zu verwenden
begin /end
zu gruppieren mehrere Anweisungen inthen /else
Teil. Der Fehler stoßen Spalte PRIMARYID wird, ist unbekannt, weil Sie Verweis auf die zimmerreserviereung, ohne das Sie deklariert eine lokale variable. Versuchen Sie dies:Präfix mit Doppelpunkt, das ist, wie Sie einzelne Parameter/Variablen-Spalten in SQL-Anweisungen in PSQL, dh
:A
oder:value1
Hi ain, dass die Arbeit für die Erstellung der SP. Aber bei der Ausführung mit flamerobin wie: WÄHLEN Sie p.ERGEBNIS VON TESTSP(WERT1) p gibt eine Spalte " unbekannt "WERT1". Und ich möchte, um eine Schleife, obwohl Sie diese Funktion, 4-Fach für 4 Werte und 4 Ergebnisse. Haben Sie Ratschläge, wie Sie damit umgehen? Ich aktualisierte mein Original-Beitrag mit allen Antworten, zu kompilieren eine vollständige Beispiel für die anderen mit der gleichen Frage.
Flamerobin weiß nicht, wie-Ersatz der
value1
mit einigen Wert haben, müssen Sie auf einige Wert-Konstanten anstelle von Variablen-Namen, dhSELECT p.RESULT FROM TESTSP('foo') p
. Als der looping, das ist die Art von schwer, mit inpot kommen aus verschiedenen Parametern für jeden Schritt, so dass Sie besser entrollen der loop - schreiben Sie den gleichen Satz von Anweisung für jeden Schritt in der Schleife, mit unterschiedlichen Parametern.InformationsquelleAutor ain
Ich denke, dass die gespeicherte Prozedur sollte so Aussehen:
InformationsquelleAutor guetlaur
Wenn Sie mehrere Unterricht für dann und/oder else-Klausel, die Sie verwenden müssen
BEGIN ... END
-block!InformationsquelleAutor tico