AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Stored proc im view verwenden
Thema durchsuchen
Ansicht
Themen-Optionen

Stored proc im view verwenden

Ein Thema von messie · begonnen am 1. Jan 2014 · letzter Beitrag vom 3. Jan 2014
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Stored proc im view verwenden

  Alt 1. Jan 2014, 17:10
Datenbank: FireBird • Version: 2.5x • Zugriff über: IBDAC
Moin,

ich habe eine stored proc geschrieben, die ich gerne über einen View aufrufen möchte:
Code:
SET TERM ^ ;
ALTER PROCEDURE DEVICECOUNT (
    ID Integer )
RETURNS (
    D_COUNT Integer )
AS
DECLARE VARIABLE COUNTER integer;
BEGIN
  D_COUNT = 0;
  FOR
    SELECT POSITION.NUMBER_OF_DEVICES from POSITION
    where POSITION.ORDER_ID = ID
    INTO :COUNTER
  DO BEGIN
    D_COUNT =: D_COUNT + COUNTER;
  END
  suspend;
END^
;
Die soll mir die Anzahl der Bauteile von n Unterpositionen liefern.

Im View rufe ich das so auf:
Code:
CREATE VIEW V_JOB_OVERVIEW (ORDER_NO, POSITIONEN_COUNT, DEVICES_COUNT)
AS  
select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT.D_COUNT

from
AUFTRAG, DEVICECOUNT(AUFTRAG.ORDERNO)




SET TERM ; ^
Leider bekomme ich beim SELECT des View mit Flamerobin eine Fehlermeldung , dass es keine row zum fetchen gäbe und der Cursor auf eine ungültige row zeigt. Der Aufruf läuft sonst ohne Fehler durch.

Was habe ich da falsch gemacht?

Grüße, Messie
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Stored proc im view verwenden

  Alt 1. Jan 2014, 21:27
Ich bin kein Firebird Spezi und hätte zunächst auf "Function" statt "Procedure" getippt, aber vielleicht geht das so in Firebird.

Zu den Fehlermeldungen:
Ein Select <Value> ..Into <Variable> wirft z.B. auch in Oracle einen Fehler, wenn kein Datensatz da ist bzw. mehr als einer.

Die Funktionalität würdest Du auch mit so einer Abfrage erreichen:
Select sum(myField) from..
ohne dass Du es selbst zählst.

Das hätte auch den Vorteil, dass immer ein Ergebnis rauskommt.
Gruß, Jo
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Stored proc im view verwenden

  Alt 1. Jan 2014, 22:12
Hallo,

komische View,
das ist doch kein richtiges SQL ?

select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT.D_COUNT
from
AUFTRAG, DEVICECOUNT(AUFTRAG.ORDERNO)

muss es nicht heissen

select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT(AUFTRAG.ORDERNO)
from
AUFTRAG

?

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Stored proc im view verwenden

  Alt 1. Jan 2014, 23:05
Nein, weder noch.

AFAIK kann eine SP nicht als Tabelle angesprochen werden, auch wenn dort eine Abfrage generiert wird.
Und als Abfragefeld schon mal gar nicht.

Einzer denkbarer Workaround wäre eine temporäre Tabelle, die von der SP generiert wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.899 Beiträge
 
Delphi 12 Athens
 
#5

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 01:33
Die von hoika angegebene Schreibweise ist korrekt.
Die SP kann wie eine Tabelle ausgelesen werden, da sie in diesem Fall selectable ist.
Allerdings stellt sich hier die Frage, warum eine SP und nicht einfach ein SubSelect? Der Inhalt der SP ließe sich ja über ein sum erschlagen.
Thomas Breitkreuz
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 09:34
Hallo und Danke schon mal.

Das mit der sum-Funktion ist ein guter Ansatz da sich das bei Firebird wie ein einfaches select verhält.
Leider bekomme ich die Übergabe nicht mehr hin. Gestern hatte es funktioniert, da ich versehentlich den Namen einer Tabellenspalte als In-Variable vergeben hatte. Hat später die ganze DB geschrottet da sich die SP weder ändern noch löschen ließ.
Code:
CREATE
procedure TEST1
(ID_IN integer)
returns
(RESULT integer)
AS
BEGIN
  RESULT =
  (select sum(NUMBER_OF_DEVICES) from POSITIONEN
  where POSITIONEN.ORDER_ID = ID_IN);
  suspend;
END
Jetzt wird ID_IN als unknown angemeckert. Auch der Umweg über eine zusätzlich angelegte Variable klappt nicht. Ersetze ich ID_IN durch eine Zahl, bekomme ich die korrekte Tabelle raus.

Wie muss ich die Übergabe korrekt ausführen?

Den View probiere ich dann später.

Grüße, Messie
  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 06:10 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 by Thomas Breitkreuz