View Full Version : Feldnamen im Sql als Überschrift
Hi *all,
kann ich ein SQL (5250 strsql) so aufrufen, das ich statt des COLGHG den feldnamen bekomme?
Hintergrund: die Datei hat gefühlte 10.000 Felder, die Überschrift ist ein Roman, ich sehe max. 3 Felder am BS. Alle (für mich relevanten) Felder mit "...as FELDX" um zu definieren ist
1. aufwendig und
2. brauch ich sowieso die 'echten' Feldnamen.
Danke
Robi
Schwarz/Grün soweit ich weiß nicht.
IBM i Navigator - Eine Prozedur ausführen ist das Standard (da kann man auch umschalten)
... zum Trost, eine Datei/Tabelle kann höchstens 8.000 Spalten haben ;)
Birgitta
Hallo Robi,
erstelle dir doch mit folgenden kleinen Programm eine View.
h dftactgrp(*no)
d MakeView pr ExtPGM('MAKEVIEW')
d View_Lib 10
d View_Name 10
d File_Lib 10
d File_Name 20
d MakeView pi
d View_Lib 10
d View_Name 10
d File_Lib 10
d File_Name 20
d
d True c *On
d False c *Off
d
d String_SQL s 32766 Inz( *Blanks )
d String_SQL1 s 32766 Inz( *Blanks )
d
d DS_Satz ds Qualified
d FeldName 10
d Type 8
d Laenge 5s 0
d Scale 5s 0
/free
*InLr = true;
Exec SQL set option commit=*none;
String_SQL = 'Create view ' + %Trim( View_Lib ) + '/' +
%Trim( View_Name ) + ' as (Select ';
String_SQL1 = 'Select sys_cname, Cast(ColType as Char(8)), ' +
'Cast(length as dec(5, 0)), ' +
'case when scale is NULL then 0 else Cast(scale as dec(5, 0)) end' +
' from syscolumns where sys_tname=''' + %Trim( File_Name ) +
''' and sys_dname=''' + %Trim( File_Lib ) + '''';
Exec SQL Declare CursorXX Cursor For String_SQL1;
Exec SQL Prepare String_SQL1 From :String_SQL1;
Exec SQL Open CursorXX;
DoW sqlcod >= 0 and sqlcod <= 100;
Exec SQL Fetch Next From CursorXX into :DS_Satz;
If sqlcod <> 0;
Leave;
EndIf;
ExSr SR_Work;
EndDo;
Exec SQL Close CursorXX;
String_SQL = %SubSt( %Trim( String_SQL ) : 1 :
%Len( %Trim( String_SQL ) ) -1);
String_SQL = %Trim( STring_SQL ) +
' from ' + %Trim( File_Lib ) + '/' +
%Trim( File_Name) + ')';
Exec SQL Execute Immediate :String_SQL;
BegSr SR_Work;
Select;
When ds_satz.type = 'DECIMAL' or
ds_satz.type = 'NUMERIC';
String_SQL = %Trim( String_SQL ) +
' Cast( ' + %Trim(ds_satz.feldname) +
' as Dec(' +%Trim(%Char(ds_satz.Laenge)) + ', ' +
%Trim(%Char(ds_satz.Scale)) + ')) as ' +
%Trim(ds_satz.feldname) + ', ';
When ds_satz.type = 'CHAR';
String_SQL = %Trim( String_SQL ) +
' Cast( ' + %Trim(ds_satz.feldname) +
' as Char(' +%Trim(%Char(ds_satz.Laenge)) + ')) ' +
' as ' + %Trim(ds_satz.feldname) + ', ';
EndSl;
EndSr;
/end-free
Eventuell musst du dir in der SR_Work noch weitere Feldtype bearbeiten.
Auch sollte keine View mit dem Namen in der Lib schon existieren.
Aufruf mit
Call Makeview (ViewLib ViewName Mylib MyFile)
Gruß
Ronald
Sauber ...
Wie cool ist das den !!!
Copiert, gewandelt, aufgerufen, angesehn begeistert!!!:p
Echt hilfreich, DANKE
(wir haben zwar auch Pgmme , die Views nach best. Mustern / Vorgaben erstellen, aber auf die Idee das so zu lösen muß man erstmal kommen!)
Vielen vielen Dank
Sonnigen Gruß vom Steinhuder Meer
Robi
Das ist das Ergebnis, wenn man schon im Urlaubmodus ist, und Nachts nicht schlafen kann..
Schönes Wochenende
Ronald
(Der dann ab Morgen im Elsass ist)