![]() |
Interbase und Stored Procedures
Hallo,
ich versuche schon den gesamten Vormittag folgende Stored Procedure aus einen Beispiel:
SQL-Code:
in eine Procedure für Interbase 6.5 zu überführen:
create procedure LiesWerbeartikel (vorgabe decimal(8,2))
select * from werbeartikel where preis > :vorgabe;
SQL-Code:
Wo liegt hier mein Denkfehler?
set term !! ;
create procedure LiesWerbeartikel (vorgabe Decimal(8,2)) as begin select * from werbeartikel where preis > :vorgabe; exit; end !! set term ; !! |
Re: Interbase und Stored Procedures
Hallo r_kerber,
in Interbase funktioniert es so:
SQL-Code:
CREATE PROCEDURE LIES_WERBEARTIKEL (
VORGABE FLOAT) RETURNS ( ID INTEGER, NAME VARCHAR(20), PREIS FLOAT) AS begin /* Procedure Text */ for select ID, NAME, PREIS FROM WERBEARTIKEL WHERE PREIS < :VORGABE into :ID, :NAME, :PREIS do suspend; end |
Re: Interbase und Stored Procedures
Hallo MrSpock,
ich habe es jetzt so hinbekommen (in der ISQL):
SQL-Code:
Aber es wird mir immer nur ein Datensatz angezeigt :roll: Und heißt das auch, dass, wenn ich alle Spalten im Ergebnis sehen will, ich auch jede einzelne als Return angeben muß? Ich habe hier gerade eine Tabel mit 150 Spalten vor mir. :( Mir ist schon klar, dass es sehr unwahrscheinlich ist, dass ein solches Problem in der Praxis auftritt, aber wie war das doch mit den Pferden und der Apotheke?
set term !! ;
CREATE PROCEDURE LIES_WERBEARTIKEL ( VORGABE FLOAT) RETURNS ( ARTIKELNUMMER INTEGER, BESCHREIBUNG VARCHAR(250), PREIS FLOAT, LAGERBESTAND integer) AS begin /* Procedure Text */ for select ARTIKELNUMMER, BESCHREIBUNG, PREIS, LAGERBESTAND FROM WERBEARTIKEL WHERE PREIS < :VORGABE into :ARTIKELNUMMER, :BESCHREIBUNG, :PREIS, LAGERBESTAND do suspend; end !! set term ; !! |
Re: Interbase und Stored Procedures
Hallo r_kerber,
deshalb habe ich das ja auch mit dem FOR SELECT ... DO geschrieben. Mit SUSPEND wird immer ein Datensatz zurückgegeben. Willst du alle Datensätze musst du das o.g. Konstrukt verwenden. |
Re: Interbase und Stored Procedures
:wall: Welches Konstrukt?
|
Re: Interbase und Stored Procedures
Hallo r_kerber,
oohps, mein Fehler, ich dachte, du hättest das FOR ... DO vergessen. Wie rufst du die Procedure jetzt auf? Du musst in der Abfrage schreiben:
SQL-Code:
SELECT * FROM LIES_WERBEARTIKEL(200)
|
Re: Interbase und Stored Procedures
Hallo MrSpock,
ich habe es so aufgerufen:
SQL-Code:
execute procedure lies_werbeartikel(1000.00)
|
Re: Interbase und Stored Procedures
Hallo r_kerber,
ich meine mich zu erinnern, dass execute nur funktioniert, wenn nicht mehr als ein Datensatz geliefert wird, ansonsten ist SELECT zu benutzen. |
Re: Interbase und Stored Procedures
Bisher fand ich das Buch, aus dem die Beispiele sind ja ganz gut. Aber mit der Zeit bekomme ich immer mehr Probleme, die Beispiele nachzuvollziehen. :roll: Liegt teilweise daran, dass der Autor schon SQL-99 nutzt, zum anderen aber auch daran, dass SQL nicht gleich SQL ist, vor allem bei Stored Procedures. Und es sind auch einige "richtige" Fehler drin. :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 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