AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Interbase: Mischen von Select und Stored Procedure
Thema durchsuchen
Ansicht
Themen-Optionen

Interbase: Mischen von Select und Stored Procedure

Ein Thema von r_kerber · begonnen am 11. Nov 2003 · letzter Beitrag vom 12. Nov 2003
Antwort Antwort
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#1

Interbase: Mischen von Select und Stored Procedure

  Alt 11. Nov 2003, 08:35
Hallo,

hier wieder mal eine Frage an die Interbase-Insider
Ich habe eine Stored Procedure erstellt.
SQL-Code:
set term !! ;
CREATE PROCEDURE ErmittleDurchschnitt
RETURNS (
    DP DECIMAL (8,2))
AS
begin
  /* Procedure Text */
  select avg (PREIS) FROM WERBEARTIKEL
    into :DP;


end !!
set term ; !!
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:
SQL-Code:
select ErmittleDurchschnitt() AS "Durchschnitt", Beschreibung, Lagerbestand, Preis
from Werbeartikel
Interbase 6.5 liefert mir hier jedoch Fehler zurück. Mit den beiden runden Klammer erhalte ich function unknown ohne die Klammern column unknown.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Interbase: Mischen von Select und Stored Procedure

  Alt 12. Nov 2003, 07:44
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 :

SQL-Code:
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 !!
Nun zu deiner Select:

Eine Procedure ist KEINE Function! Du rufst Die SP aber wie eine Funktion auf!!!! Versuch es mal so:

SQL-Code:
select DP AS "Durchschnitt", Beschreibung, Lagerbestand, Preis
from Werbeartikel, ErmittleDurchschnitt
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.

Grüße
Lemmy
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: Interbase: Mischen von Select und Stored Procedure

  Alt 12. Nov 2003, 07:55
Hallo Lemmy,

danke, so funktioniert es. 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:
CREATE PROCEDURE ErmittleDurchschnitt
RETURNS (
^------
syntax error: RETURNS (
correction: (

DP DECIMAL (8,2))
AS
^-
syntax error: AS begin
correction: begin

begin
/* Procedure Text */
^ ^
syntax error: / * Procedure Text
correction: Text
syntax error: * / FOR
correction: : FOR

FOR
select avg (PREIS) FROM WERBEARTIKEL
^----- ^---
syntax error: FOR select
correction: BEGIN select
syntax error: FROM WERBEARTIKEL
correction: WERBEARTIKEL

into P
DO
^-
syntax error: DO
correction: FROM

SUSPEND;

^
syntax error: <end>
expected: <delimited identifier> <identifier> ABSOLUTE ALLOCATE ALTER BEGIN
CALL CASE CLOSE COMMIT CREATE DEALLOCATE DELETE DESCRIBE END
EXECUTE FETCH FOR GET IF INSERT LEAVE LOOP OPEN PREPARE REPEAT
RESIGNAL RETURN ROLLBACK SELECT SET SIGNAL START UPDATE WHILE
correction: END ; END <end>
Weiß jemand wie es bei Interbase 7.1 aussieht? Laut Hochglanzprospekten soll hier ja SQL-92 umgesetzt sein.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Interbase: Mischen von Select und Stored Procedure

  Alt 12. Nov 2003, 08:20
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
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Interbase: Mischen von Select und Stored Procedure

  Alt 12. Nov 2003, 09:00
Zitat von MrSpock:
wenn die Abfrage ...
Danke für den Hinweis!!!


@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
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#6

Re: Interbase: Mischen von Select und Stored Procedure

  Alt 12. Nov 2003, 09:22
@Lemmy:
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz