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
TBx
(Administrator)

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

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 00: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
 
#2

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 08: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
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
547 Beiträge
 
Delphi 12 Athens
 
#3

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 08:47
Da fehlt der Doppelpunkt vor dem ID_IN.

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

Wenn da nur Create Procedure steht, muss man die "alte" Procedure erst löschen, sonst funktioniert es nicht.
Besser ist "CREATE OR ALTER PROCEDURE"

Ich würde hier allerdings auch keine Procedure verwenden, macht nicht viel Sinn für die doch einfache Abfrage.

Gruß

Ralf
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
messie

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

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 10:05
Da fehlt der Doppelpunkt vor dem ID_IN.
Arrrghh...

Bezüglich des Views habe ich das Problem, dass die Syntax von Hoika nicht laufen mag
Code:
select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT(AUFTRAG.ORDERNO)
from
AUFTRAG
Da wird zunächst Function unknown gemeldet. Wenn ich DEVICECOUNT an from Auftrag anhänge, bekomme ich ein input parameter mismatch.

Nehme ich meine obige Syntax, komme ich dann zu einem Ergebnis wenn ich einen Wert explizit angebe:
Code:
CREATE VIEW V_JOB_OVERVIEW (ORDER_NO, POSITIONEN_COUNT, DEVICES_COUNT)
AS
select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT.D_COUNT

from
AUFTRAG, DEVICECOUNT(0)
Der Wert 0 muss nicht vorhanden sein.
Muss ich da noch eine Variable vergeben oder ist mein Vorhaben doch nicht möglich?
Die Aufgabe: zu jedem Record in Table AUFTRAG können n Records in Table POSITIONEN gehören. Ich brauche die Summe aller Felder DEVICES_COUNT zu einem Auftrag. Ist das möglich?
Wie würde denn so etwas nur als view ohne SP aussehen?

Grüße, Messie
  Mit Zitat antworten Zitat
jobo

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

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 11:18
Die SP in der FromClause liefert immer einen Wert, der ungejoint mit der Hauptmenge "permutiert" wird.
Das macht hier nicht viel aus- da es nur ein Wert ist, macht aber auch keinen Sinn. Ist mir grad nicht aufgefallen.

Die Variante mit der From Clause würde Sinn machen, wenn die SP eine echte Datenmenge liefert. Weiß nicht ob firebird das kann.
Die Variante mit dem Aufruf als "Funktion" würde mehr Sinn machen, aber ich krieg da wie gesagt schon Probleme, wenn das Ding als Procedure und nicht als Function deklariert ist, wie auch immer,
so sollte ein View funktionieren:

Code:
create view V_JOB_OVERVIEW as
select a.ORDERNO, a.POSITIONENCOUNT, grp.NoDevs --, DEVICECOUNT(AUFTRAG.ORDERNO)
  from AUFTRAG a,
       (select p.ORDERNO, sum(NUMBER_OF_DEVICES) as NoDevs
          from POSITIONEN p
         group by ORDERNO) grp
 where a.ORDERNO = grp.ORDERNO;
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 11:19
Bezüglich des Views habe ich das Problem, dass die Syntax von Hoika nicht laufen mag
Code:
select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT(AUFTRAG.ORDERNO)
from
AUFTRAG
Da wird zunächst Function unknown gemeldet.
dann solltest Du einmal überprüfen, ob es diese Function auch gibt, oder ob beim
Code:
Create
etwas daneben gegangen ist.

Nehme ich meine obige Syntax, komme ich dann zu einem Ergebnis wenn ich einen Wert explizit angebe:
Code:
CREATE VIEW V_JOB_OVERVIEW (ORDER_NO, POSITIONEN_COUNT, DEVICES_COUNT)
AS
select
AUFTRAG.ORDERNO, AUFTRAG.POSITIONENCOUNT, DEVICECOUNT.D_COUNT

from
AUFTRAG, DEVICECOUNT(0)
Wenn ich mich da nicht vertue liefert
Code:
DEVICECOUNT(0)
genau einen Wert, (sinnvoll oder nicht lassen wir mal außen vor) dann sollte dieses Statement auch funktionieren, falls es die Funktion gibt.

Der Wert 0 muss nicht vorhanden sein.
Muss ich da noch eine Variable vergeben oder ist mein Vorhaben doch nicht möglich?
Die Aufgabe: zu jedem Record in Table AUFTRAG können n Records in Table POSITIONEN gehören. Ich brauche die Summe aller Felder DEVICES_COUNT zu einem Auftrag. Ist das möglich?
Wie würde denn so etwas nur als view ohne SP aussehen?

[/QUOTE]

Code:
Select irgendwas
from Auftrag
    ,(select Order_ID,sum(NUMBER_OF_DEVICES) DSUM from POSITIONEN group by order_ID) as DeviceCount
where DeviceCount.Order_ID=Aufrtrag.Order_ID
So ungefähr sollte es funktionieren
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#7

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 14:48
Vielleicht verstehe ich etwas falsch, aber warum nicht einfach etwas in der Art:
Code:
select
  a.orderno
  , a.positionencount
  , sum(p.number_of_devices) as devices_count
from
  auftrag a join position p on (a.orderno = p.order_id)
group by
  a.orderno
  , a.positioncount
Das Ganze dann verpackt in einer View.
  Mit Zitat antworten Zitat
messie

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

AW: Stored proc im view verwenden

  Alt 2. Jan 2014, 22:30
Hallo Thomas,

das sieht im ersten Test ziemlich gut aus!

Ich werde das morgen mal in den ganzen Kontext einbauen und dann berichten.

Danke an Alle, 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 15:20 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