PDA

View Full Version : Feldnamen im Sql als Überschrift



Robi
07-08-14, 11:03
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

B.Hauser
07-08-14, 11:23
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

malzusrex
08-08-14, 08:58
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

Robi
08-08-14, 09:49
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

malzusrex
08-08-14, 12:01
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)