![]() |
Interbase: Mischen von Select und Stored Procedure
Hallo,
hier wieder mal eine Frage an die Interbase-Insider :lol: Ich habe eine Stored Procedure erstellt.
SQL-Code:
Wenn ich diese mit EXECUTE aufrufe erhalte ich auch ein Ergebnis zurück. In einem Beispiel, dass ich habe wird diese Procedure nun in einem SELECT-Statement genutzt:
set term !! ;
CREATE PROCEDURE ErmittleDurchschnitt RETURNS ( DP DECIMAL (8,2)) AS begin /* Procedure Text */ select avg (PREIS) FROM WERBEARTIKEL into :DP; end !! set term ; !!
SQL-Code:
Interbase 6.5 liefert mir hier jedoch Fehler zurück. Mit den beiden runden Klammer erhalte ich function unknown ohne die Klammern column unknown. :wall:
select ErmittleDurchschnitt() AS "Durchschnitt", Beschreibung, Lagerbestand, Preis
from Werbeartikel |
Re: Interbase: Mischen von Select und Stored Procedure
Hi,
hast Du nicht vor ein paar Tagen schon mal eine Frage bzgl. SP in Interbase gestellt?? Da wurde Dir doch ausdrücklich gesagt (falls nicht, dann sei Dir verziehen ;-) ), dass *Select-SP immer mit Select ausgeführt werden *Executable-SP immer mit Execute *zu einer Select-SP immer ein For-Select-Do gehört Also muss deine SP so aussehen, damit es auch mit der Nachbarin klappt :-D :
SQL-Code:
Nun zu deiner Select:
set term !! ;
CREATE PROCEDURE ErmittleDurchschnitt RETURNS ( DP DECIMAL (8,2)) AS begin /* Procedure Text */ FOR select avg (PREIS) FROM WERBEARTIKEL into :DP DO SUSPEND; end !! Eine Procedure ist KEINE Function! Du rufst Die SP aber wie eine Funktion auf!!!! Versuch es mal so:
SQL-Code:
So sollte es eigentlich klappen. Du musst aber aufpassen, sollte die SP mehr als einen Wert zurückliefern, würde diese Select zu einem kartesischen Produkt führen (d.h. alles aus Tabelle 1 (Werbeartikel) wird mit allem aus Tabelle 2 (ErmittleDurchschnitt) zusammengewürfelt. In einem solchen Fall musst Du mit einem Join die Tabellen verknüpfen.
select DP AS "Durchschnitt", Beschreibung, Lagerbestand, Preis
from Werbeartikel, ErmittleDurchschnitt Grüße Lemmy |
Re: Interbase: Mischen von Select und Stored Procedure
Hallo Lemmy,
danke, so funktioniert es. :oops: Ich kann mich jedoch des Eindrucks nicht erwehren, das Interbase 6.5 nicht so ganz SQL-92-konform ist. Hier das Ergebnis eines Tests auf SQL-92: Zitat:
|
Re: Interbase: Mischen von Select und Stored Procedure
Hallo Lemmy,
wenn die Abfrage wie in diesem Fall nur einen Wert zurückgibt, reicht ein einfaches SUSPEND, die Schleife wäre dann nicht nötig:
SQL-Code:
CREATE PROCEDURE ErmittleDurchschnitt
RETURNS ( DP DECIMAL (8,2)) AS begin /* Procedure Text */ select avg (PREIS) FROM WERBEARTIKEL into :DP; SUSPEND; end |
Re: Interbase: Mischen von Select und Stored Procedure
Zitat:
@r_kerber: Ich kenne mich mit der IB-Schiene ab der 6.5er nicht mehr genau aus. Eines ist jedoch sicher: Jeder SQL-Server kocht bei der Trigger und StoredProcedure-Language sein eigenes Süppchen. Selbst wenn jemand sagt, dass ein bestimmter SQL-Server eine bestimmte SQL-Norm unterstützt, so heißt das nicht, dass Du einfach eine SQL vom einen Server auf den anderen mit Copy-and-Paste kopieren kannst. Grüße Lemmy |
Re: Interbase: Mischen von Select und Stored Procedure
@Lemmy: :cry:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz