-
Dynamisches embedded SQL
Hallo,
ist stehe gerade etwas auf dem Schlauch.
Mit folgendem embedded SQL kann ich Anzahl der Sätze in der Datei ADRKOP ermitteln und in das Feld COUNT ausgeben.
C/EXEC SQL
C+ select count(*)
C+ into :count
C+ from adrkop
C/END-EXEC
Nun möchte ich nur noch den Dateinamen variabel gestalten. Also zuerst das SQL-Statement zusammenstellen und dann ausführen.
Aber so geht’s ja nicht!!
sqlstatement =
' select count(*)' +
' into :count' +
' from ' + file
Wie muss denn hierzu das SQL-Statement aussehen?
-
Dynamisches SQL mit Ergebnis geht nur mit Cursor!
sqlstmt = 'select Count(*) from ' + MyFile;
exec SQL prepare MyStmt from : sqlstmt;
exec SQL declare MyCursor Cursor for MyStmt;
exec SQL open MyCursor;
exec SQL fetch MyCursor into : Count;
exec SQL Close myCursor;
Dies beschreibt nur das Prinzip, die genaue Syntax entnimm bitte dem Handbuch.
-
SELECT ... INTO kann nicht in Verbindung mit dynamischem SQL verwendet werden, wohl aber VALUES ... INTO.
Code:
YourSQLStmt = 'VALUES(Select Count(*) from ' + File +
' ) into ?';
exec SQL Prepare DynSQL from MySQLStmt;
exec SQL Execute DynSQL using (:YourOutput);
Wenn's nur darum geht wieviele Sätze in einer Tabelle vorhanden sind (und Du die Bibliothek kennst), kannst Du das ganze auch mit statischem SQL machen.
Code:
Exec SQL Select Number_Rows into :Count
From SysTableStat
Where System_Table_Schema = :YourSchema
and System_Table_Name = :YourFile;
Birgitta
-
Vielen Dank für die schnelle Hilfe
-
Hallo Brigitta, gibt es eine Möglichkeit die Anzahl der Datensätze (count..) einer IFS-Datei zu ermitteln ? Ich arbeite später im Programm mit FROM TABLE(QSYS2.IFS_READ(PATH_NAME......
Gruss Heinrich
-
Eine IFS-Datei ist ein langer String und hat eigentlich keine Zeilen.
Wenn Du allerdings Umbrüche mit CRLF in deiner IFS-Datei hast und darauf basierend die Zeilen ermitteln willst, warum verwendest Du dann nicht einen einfachen Count(*) in Verbindung mit dem IFS_READ?
Code:
Select Count(*) from Table(IFS_READ(...));
Andreas Prouza wird wahrscheinlich auch ein Beispiel mit Regular-Expressions bringen, in dem die CRLFs abgezählt werden.
... auf alle Fälle gibt es keinen IBM Service, mit dem die Anzahl der "Zeilen" in einer IFS-Datei ermittelt werden kann (zumindest ist mir keiner bekannt)
Birgitta
-
Ich bin im embedded SQL unterwegs (prepare, execute…) Damit bekomme ich das mit dem IFS_READ einfach nicht hin. Der Name des Pfads kommt per Variable .
-
Wenn es eine CHAR Variable ist (und keine VARCHAR) musst du den Pfad mit TRIM die Blanks wegschneiden.
lg Andreas
-
Zitat von B.Hauser
Andreas Prouza wird wahrscheinlich auch ein Beispiel mit Regular-Expressions bringen, in dem die CRLFs abgezählt werden.
Klar, kann ich machen :-)
exec sql set :variable = regexp_count(GET_CLOB_FROM_FILE('/verzeichnis/file.txt'), X'0D'))
Der HEX Wert hängt vom Typ des Files ab, welcher HEX Wert für die Zeilenbegrenzung verwendet wird.
Bei großen Files ist auch hier die Variante mit regex um mehr als 10 Mal schneller als das IFS_READ.
lg Andreas
-
Ich bin im embedded SQL unterwegs (prepare, execute…) Damit bekomme ich das mit dem IFS_READ einfach nicht hin. Der Name des Pfads kommt per Variable .
Was für einen Fehler bzw. SQLCODE bekommst Du denn an welcher Stelle?
Kann das (aufbereitete) SQL Statement mit ACS - Run SQL Scripts korrekt ausgeführt werden?
Wenn Du mit dynamischem SQL, also PREPARE und EXECUTE arbeitest, musst Du natürlich auch dafür sorgen, dass alle Hochkommata im String verdoppelt werden, also auch vor und nach der IFS-Datei!
Also etwa so:
Code:
DynSQLStmt = 'Select * from Table(IFS_Read(''' + %Trim(YourIFSFile) + '''))';
Du solltest auf alle Fälle prüfen, ob dynamisches SQL überhaupt notwendig ist. Nach meiner Erfahrung können über 90% aller SQL Statements in embedded SQL statisch gehandelt werden.
... und ich hab' in meinem Leben schon jede Menge (embedded) SQL Programme geschrieben.
-
Der Witz an dem Count der CR einer IFS-Datei ist, dass das Zählen genau so lange dauert wie das Verarbeiten. Von Vorteil ist das nicht gerade.
Similar Threads
-
By tarkusch in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 02-06-14, 09:45
-
By NEWSolutions Redaktion in forum NEWSolutions artikel
Antworten: 0
Letzter Beitrag: 05-12-13, 18:03
-
By mott in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 18-09-02, 15:42
-
By Ludger Muhmann in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 30-07-02, 09:49
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 12-10-01, 09:47
Tags for this Thread
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