-
embeddet SQL, Lib variable setzen
Guten Tag,
Auf einer iSeries, die mehrere Testumgebungen und eine Produktiv Umgebung hat, müssen wir einen max wert aus einer Datei ermitteln.
Code:
/EXEC SQL
+ SET :SZAZ =(SELECT MAX(#XKEY#) FROM SAPASOP WHERE #INKEY# > 0)
/END-EXEC
Die Datei gibt es in der QTEMP und in der Echt/Test Umgebung
Qtemp steht in der Liblist vorne
Wie muß das Statement lauten, wenn ich die richtige lib z.b. in einer Variablen habe
Code:
/EXEC SQL
+ SET :SZAZ =(SELECT MAX(#XKEY#) FROM :MYLIB/SAPASOP WHERE #INKEY# > 0)
/END-EXEC
funktioniert nicht
Vielen Dank
Dietlinde Beck
-
Hallo Dietlinde,
mache vorher einfach einen OVRDBF
PHP-Code:
dcl-pr System int(10) extproc('system'); *n pointer value options(*string); end-pr;
System( 'ovrdbf Datei ' + %Trim(MyLib) +'/SAPASOP' ); Exex SQL SET :SZAZ =(SELECT MAX(#XKEY#) FROM DATEI WHERE #INKEY# > 0);
Gruß
Ronald
-
Das ist eine der schlechtesten Lösungen;-) da sie nicht SQL-Konform ist.
OVRDBF's sollte (und muss) man in SQL vermeiden, da eine Tabelle ja durchaus geöffnet bleibt und mit dieser weitergearbeitet wird auch wenn man den OVRDBF wieder löscht.
Das selbe gilt ebenso für CHGLIBL zur Laufzeit.
Der richtige Weg wäre ein dynamischer SQL per "Execute Statement".
-
z.B.
d sqlstm s 1024a varying
d wrkfile s 20a inz('QTEMP/TESTFILE')
/Free
sqlstm = 'CREATE Table ' + %trim(wrkfile) +
' as +
(select * from test) +
with data ';
/End-Free
c/exec sql
c+ execute immediate :sqlstm
c/end-exec
c move *on *inlr
-
Zitat von Dschainers
z.B.
d sqlstm s 1024a varying
d wrkfile s 20a inz('QTEMP/TESTFILE')
/Free
sqlstm = 'CREATE Table ' + %trim(wrkfile) +
' as +
(select * from test) +
with data ';
/End-Free
c/exec sql
c+ execute immediate :sqlstm
c/end-exec
c move *on *inlr
Und wo landet das Ergebnis?
-
Welches Ergebnis?
Dieses Ergebnis ist eine neue Tabelle!
Ich weiß auch nicht, was dies mit deiner Frage zu tun hat.
Deine Anfrage geht nur mit einem dynamischen Cursor (ohne Exec SQL):
D MyOpen S 1000 varying
MyOpen = 'Select blabla ....';
prepare statement from : MyOpen;
declare OpenCursor cursor for MyOpen;
open OpenCursor;
fetch OpenCursor into : MyVar;
close OpenCursor;
-
Ich wollte nur aufzeigen, wie man ein variables SQL Statement zusammenbaut.
Da dies anscheinend noch nicht bekannt war.
-
Zitat von Fuerchau
Welches Ergebnis?
Dieses Ergebnis ist eine neue Tabelle!
Ich weiß auch nicht, was dies mit deiner Frage zu tun hat.
Deine Anfrage geht nur mit einem dynamischen Cursor (ohne Exec SQL):
D MyOpen S 1000 varying
MyOpen = 'Select blabla ....';
prepare statement from : MyOpen;
declare OpenCursor cursor for MyOpen;
open OpenCursor;
fetch OpenCursor into : MyVar;
close OpenCursor;
statement Name im declare und prepare müssen matchen, also:
exec sql declare OpenCursor cursor for MyOpen;
exec sql prepare MyOpen from : MyOpen;
D*B,
dem sich bei Datenbank und LIBL der Magen rumdreht. Besser wäre, Namimg *SQL und die Umgebung über das default Schema zu steuern.
-
Zitat von Dschainers
z.B.
d sqlstm s 1024a varying
d wrkfile s 20a inz('QTEMP/TESTFILE')
/Free
sqlstm = 'CREATE Table ' + %trim(wrkfile) +
' as +
(select * from test) +
with data ';
/End-Free
c/exec sql
c+ execute immediate :sqlstm
c/end-exec
c move *on *inlr
genau das hatte ich bei mir mit dem SET gestestet. Und es hat bei mir nicht funktioniert. Deshalb bin ich auf dem OVRDBF gekommen
-
Was soll den ein "Create Table" für eine Set-Anweisung zurückliefern?
Das wäre mir aber neu;-).
-
Die Frage, wie man Werte aus einem dynamischen SQL herauskitzeln kann, wurde aber nicht beantwortet.
Code:
D #SQL S 5000A VARYING
*
D #LIB S 10A INZ('QTEMP')
D #FILE S 10A INZ('TEST')
*
D #Anz1 S 10P 0
/FREE
#SQL = 'VALUES( +
SELECT COUNT(*) FROM ' + %TRIMR(#LIB) + '/' +
%TRIMR(#FILE) +
') +
INTO ?';
EXEC SQL PREPARE Stmt1 FROM :#SQL;
EXEC SQL EXECUTE Stmt1 USING :#Anz1;
/END-FREE
von Scott Klement abgeschaut; z.B. hier noch komplexer:
https://www.ibm.com/developerworks/c...8-94cd018d1560
-
Wenn du mein obiges (von Dieter korrigiertes) Beispiel anschaust, siehst du das sehr wohl.
Nur mit dem Unterschied, dass per Cursor Resultsets und mehr als 1 Wert übergeben werden können.
So verfahre ich z.B. bei embedded SQL via ArdGate um Daten aus Oracle oder SQL-Server direkt im Programm zu erhalten.
Scotts Beispiele aus dem Link beschränken sich da auf 1 Satz per Values, was einem "select blabla into .... from ..." entspricht.
Similar Threads
-
By Rhenania Computer in forum NEWSboard Server Software
Antworten: 0
Letzter Beitrag: 31-08-16, 15:38
-
By dibe in forum IBM i Hauptforum
Antworten: 19
Letzter Beitrag: 21-12-15, 22:48
-
By thluetjen in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 31-01-08, 10:21
-
By Henrik Motzkus in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 05-03-02, 09:13
-
By W.Steiner in forum Archiv NEWSblibs
Antworten: 0
Letzter Beitrag: 05-07-01, 09:55
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks