![]() |
Select ... into Variable
Hallo Zusammen,
ist es möglich in einem SQL Select einen Wert in eine Variable umzuleiten (wie in einer Prozedur)? Bsp.:
Delphi-Quellcode:
Oracle quittiert das, dass die Bindvariable nicht existiert.
with QueryMyReport do
BEGIN SQLcommand:= 'select name1 from sadr_adresse where adr_adrid = 100000 into :sNAME1'; SQL.Clear; SQL.Add(SQLcommand); ParambyName('sNAME1'); OPEN; // hier würde die Behandlung der Variablen sNAME1 kommen CLOSE; END; Kennt jemand die korrekte Vorgehensweise? Oder gibt es etwas besseres? Danke |
Re: Select ... into Variable
So weit ich weiß dürfen Parameter nur für Werte (also DB-Felder) und nicht für Tabellen (ein String würde doch mit '' umgeben werden) verwendet werden...
Aber Du könntest ja einfach einen normalen Select machen und dann Open und das Speichern in eine Variable (oder mehrere) manuell erledigen, dürfte kaum mehr Code sein... |
Re: Select ... into Variable
Hallo,
die Frage ist wozu ??? Vielleicht meinst du ja sowas ?
Delphi-Quellcode:
var
sStr: String; with QueryMyReport do BEGIN SQLcommand:= 'select name1 As sName1 from sadr_adresse where adr_adrid = 100000'; SQL.Clear; SQL.Add(SQLcommand); OPEN; try // hier würde die Behandlung der Variablen sNAME1 kommen sStr:= FieldByName('sName1').AsString; finally CLOSE; end; END; Ich habe extra sStr als Variable genommen, weil Delphi-Variablen nicht einfach per SQL gefüllt werden können. Heiko |
Re: Select ... into Variable
Ganz zu schweigen davon, dass es viel einfacher ginge das Ergebnis direkt abzufragen... (siehe hoikas code ;-) )
In Oracle kannst du nicht einfach PL/SQL und reines SQL vermischen. Um ein SELECT-INTO auszuführen, musst du in einem PL/SQL Block sein, außerdem kommt das INTO direkt nach dem SELECT-Teil, nicht am Ende der Abfrage:
SQL-Code:
Du musst auch auf den Fall reagieren, dass vllt nix gefunden wird (denn dann wirft Oracle eine Exception!):
begin
select name1 into :name1 from sadr_adresse where adr_adrid = 100000; end;
SQL-Code:
Dieses SQL ist aber keine Abfrage mehr, und müsste dann mit Execute, ExecSql oder wie auch immer es mit deiner Zugriffsbibliothek heißt, ausgeführt werden.
begin
select name1 into :name1 from sadr_adresse where adr_adrid = 100000; exception when no_data_found then :name1 := null; end; Wenn du es einfach als normale Abfrage ausführst, wie Hoika es beschrieb musst du dir darum keine Sorgen machen. Es ist übrigens kein Zufall, dass dieses Portal ein Datenbank-Forum hat, in dem man nach der Datenbank und den Zugriffsbibliotheken gefragt wird. ;-) |
DP-Maintenance
Dieses Thema wurde von "Daniel" von "Object-Pascal / Delphi-Language" nach "Datenbanken" verschoben.
|
Re: Select ... into Variable
OK! Super Antworten: ich werde rangehen und die "einfachere" Variante
einsetzen: ich nehme den "reinen" SQL Code von HOIKA. Melde mich dann nochmals... Vielen Dank für das "Verschieben" in die Kategorie "Datenbanken". |
Re: Select ... into Variable
So, jetzt konnte ich endlich den Code erweitern:
Delphi-Quellcode:
Als connector benutze ich übrigens den TOraSession von Devart.
with QueryMyReport do
BEGIN SQLcommand:= 'select name1 from sadr_adresse where adr_adrid = 100000'; SQL.Clear; SQL.Add(SQLcommand); ParambyName('sNAME1'); OPEN; with QueryMyReport DO BEGIN while not EOF do BEGIN sName:= FieldbyName('name1').AsString; // hier kommen weitere Anweisungen... END; END; QueryMyReport.Close; END; Vielen Dank für eure Hilfe. Gruss Quake_MSC |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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