Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO und Subselect (https://www.delphipraxis.net/99437-ado-und-subselect.html)

Sidorion 12. Sep 2007 10:48

Datenbank: Oracle • Zugriff über: ADO

ADO und Subselect
 
Hallo zusammen,
kann das sein, dass ADO nicht mit Subselects klarkommt? Sobald ich neben normalen Spalten der Tabelle A einen subselect auf Tabelle B mache kommt der Oraclefehler 'Rechte Klammer fehlt'. Hierbei ist das Statement selber ziemlich egal, sobald irgendein Subselect drin ist kommt der Fehler.
Konkret benutze ich einen TADOCommand und weise das Statement dem CommandText zu.
Das Statement funktioniert im SQLExplorer und SQLPlus tadellos.

mkinzler 12. Sep 2007 10:53

Re: ADO und Subselect
 
Zeig mal dein Statement.

Sidorion 12. Sep 2007 13:42

Re: ADO und Subselect
 
kann ich gerne machen, aber wie gesagt, sobeald auch nur irgendein subselect vorkommt gehts nimmer (in 'normalen' Datenbankzugriffsprogrammen schon).
SQL-Code:
select
  trunc(avsgendt) Tag,
  count(*) Anzahl,
  sum((select sum(artquant) from cstordps where cstordps.cstordnm=cstordhd.cstordnm)) Packstuecke
from cstordhd
where srctype='Host'
and trunc(avsgendt)>=trunc(SYSDATE-10)
and trunc(avsgendt)<=trunc(SYSDATE)
and custclnt='Loewe'
group by trunc(avsgendt)
union
select
  trunc(avsgendt) Tag,
  count(*) Anzahl,
  sum((select sum(artquant) from cstordpsj where cstordpsj.cstordnm=cstordhdj.cstordnm)) Packstuecke
from cstordhdj
where srctype='Host'
and trunc(avsgendt)>=trunc(SYSDATE-10)
and trunc(avsgendt)<=trunc(SYSDATE)
and custclnt='Loewe'
group by trunc(avsgendt)
es reich aber auch schon ein
SQL-Code:
select
  einfeld,
  (select nocheinfeld from andereTabelle where tabelle.joinfeld=andertabelle.joinfeld) test
from tabelle
wobei hier natürlich gesichert sein muss, dass der subselect nur eine row liefert, aber das wäre ja dann ein anderer oracle-fehler.
p.s. ums nochmal deutlich zu machen: statement funktioniert im SQL-Explorer UND in SQLPlus.

alzaimar 12. Sep 2007 14:21

Re: ADO und Subselect
 
Lustic, aber umgehe das Problem doch einfach, indem Du die Query in eine VIEW schmeisst.

Sidorion 12. Sep 2007 14:44

Re: ADO und Subselect
 
Nachdem das eine Art DB-Explorer ist und dieses Statement vom Nutzer eingegeben wird, fällt diese Option allerdings aus. Das Programm wird benutzt, um beim Kunden auf die Datenbank bequem zugreifen zu können, ohne die BDE installieren zu müssen.

mkinzler 12. Sep 2007 14:48

Re: ADO und Subselect
 
Welche Datenbanken sollen unterstützt werden?

alzaimar 12. Sep 2007 14:56

Re: ADO und Subselect
 
Es gibt für Oracle doch bestimmt soetwas wie einen SQL-Monitor. Schau doch mal, was ADO an Oracle schickt?

grenzgaenger 12. Sep 2007 23:56

Re: ADO und Subselect
 
@Sidorion, änder doch mal deinen Titel, was du da hast, ist kein Subselect, sondern 'n UNION.

wenn du den titel richtig wählst, findet sich wohl auch eher einer, welcher dir weiterhelfen kann, ausserdem, wenn ein anderer ein ähnliches problem hat, findet er dann auch eine lösung mit der suche ... so nicht.

grüss und noch 'n schönen abend.

PS: auch dein zweites beispiel, ist kein subselect... sondern eine nicht standard erweiterung deines db servers.

mkinzler 13. Sep 2007 07:32

Re: ADO und Subselect
 
Warum soll das kein Subselect sein?

alzaimar 13. Sep 2007 08:44

Re: ADO und Subselect
 
Zitat:

Zitat von grenzgaenger
PS: auch dein zweites beispiel, ist kein subselect... sondern eine nicht standard erweiterung deines db servers.

Äh.. :shock: Nö.

Sidorion 13. Sep 2007 09:50

Re: ADO und Subselect
 
@grenzgaenger: wenn das Problem die union gewesen wäre, hätte ich auch geschrieben, dass ich ein Problem mit unions habe. Der Titel des Threads trifft genau den Kern des Problems. Zum Subselect, der 'keiner ist': wie sieht Deiner Meinung nach ein 'richtiger' Subselect aus?

alzaimar 13. Sep 2007 09:58

Re: ADO und Subselect
 
Sidorion, lass doch. Hast Du schon mal geschaut, was ADO an Oracle schickt?

gibt es in Oracle sowas wie 'EXEC (<SQL-Commando>)'?

Dann kannst Du nämlich die ADO-Macke umgehen. Du schickst also kein 'SELECT * FROM BLA' an Oracle, sondern ein
SQL-Code:
EXEC ('SELECT * FROM BLA')
Das wird ADO bestimmt nicht parsen...

mkinzler 13. Sep 2007 10:16

Re: ADO und Subselect
 
Ich vermute mal grenzgaenger verwechselt hier Subselect und Derived Table

Sidorion 13. Sep 2007 12:11

Re: ADO und Subselect
 
wenn du mir noch sagst, wie ich das schauen kann, alzimar, könnte ich das gerne tun. In Oracle gibts nen execute, aber der ist für den Precompiler von Oracle, da lass ich die Finger von :?

grenzgaenger 15. Sep 2007 14:41

Re: ADO und Subselect
 
ein subselect sieht in etwa folgendermassen aus...
SQL-Code:
select * from bla where exists (select * from blabla where ...)
alternativ noch ein anderes beispiel, hier mit der in clause
SQL-Code:
 Select Film_Title
   From Thespian_Film_Table
  Where Thespian_Last_Name = "Ford"
    and Thespian_First_Name = "Harrison"
    and Film_Title in
         (Select Film_Title
            From Film_Table
            Where Film_Year equals "1984");


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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