Trucs et Astuces - AS400 - Tips and Tricks
Table des matières table of Contains
la table sql AS400 qui fait toujours une ligne s'appelle qsys2.qsqptabl. Et aussi sysibm.sysdummy1. Pratique pour tester les fonctions intégrées
sql limité : 'select * from makep fetch first 10 rows only'
création de table par référence à une table dictionnaire : create table as (select ... from ...,...) with no data ; label on ...
Glané sur le web
I'd rather prefer select * from master join (select * from billfille) as billfile on key1 = k1 and key2 = k2à http://search400.techtarget.com/tip/1,289483,sid3_gci1097043,00.html?FromTaxonomy=%2Fpr%2F2f9
Speed up SQL subselects
Drew Dekreon
10 Jun 2005
An SQL subselect picks records based on whether a value appears in another select -- a simple example would be:
select * from orders where partno in (select partno from outofstock) .
My master file has two keys so to do a subselect I have to to combine them. Key1 is 9s0, key2 is 3s0 so I have been selecting like this:
select * from master where key1*1000+key2 in (select k1*1000+k2 from billfile)This is very slow, compared to an inner join. I recently found that if I converted the combined key to a string, response is as fast as an inner join (apparently the iSeries is much better with characters than math):
select * from master where cast(key1 as char(9))||cast(key2 as char(3))in (select cast(k1 as char(9))||cast(k2 as char(3)) from billfile)The || is string concatenation in SQL; cast() transforms one data type to another.
at http://search400.discussions.techtarget.com/WebX?msgInContext@@.ee84636/5760
there is a very simple solution : for example, look at this SQL that produces a wide range of SQL column typeHave a Question on CPYTOIMPF converting to csv. For the Numeric fields, the leading Zeros are removed (which is fine).. but the trailing zeros are shown as blanks & the comma separator is shown at the length of the Numeric field.
Is there a way to supress trailing Zero/Blank to show the Numeric data
Thanks in Advance.
Kris
select
'<record><mydate>'
concat
char(current date,iso) concat
'</mydate><mytime>' concat
char(current time, iso) concat
'</mytime><mystamp>' concat
char(current timestamp) concat
'</mystamp><user>' concat
user concat
'</user><mydecimal>' concat
char(decimal(days(current date), 7, 0)) concat
'</mydecimal><myzoned>' concat
char(zoned(days(current date), 7, 0)) concat
'</myzoned><mydouble>' concat
char(double(days(current date) ** 12 )) concat
'</mydouble><mybigint>' concat
char(bigint(days(current date) ** 3 )) concat
'</mybigint>
from qsys2/qsqptabl
MISSING : XML HEADER .......................................AJOUTER LES
ENTETES
XML
See also QSH DB2, its exports are CSV
from http://www.itjungle.com/fhg/fhg102605-story01.html
select chgcod,Here's the result set.
sum(case state when 'NY' then 1 else 0 end) as New_York,
sum(case state when 'MN' then 1 else 0 end) as Minnesota,
sum(case when state not in ('NY','MN')
then 1 else 0 end) as Other
from qiws/qcustcdt
group by chgcod
order by chgcod
CHGCOD NEW_YORK MINNESOTA OTHER
1 2 0 3
2 1 0 3
3 0 2 1
found athttp://www.systeminetwork.com/isnetforums/showthread.php?t=45809
Update filea as a
set (clasaa,slmnaa) =
(select classbb,slmnbb from fileb as b
where b.divnbb = a.divnaa
and b.pnumbb = a.pnumbb),
where exists
(select * from fileb as b
where b.divnbb = a.divnaa
and b.pnumbb = a.pnumbb);
Found on the web :
at http://www.search400.com/tip/1,289483,sid3_gci1098569,00.html?track=NL-177&ad=521380
CL has been able to do a few forms of writing to files for many years. CL can call the Sort (QLGSORT) API and pass records into the API through the input buffer -- the API can send those to output files which can be copied/appended to other files. CL can call QM queries to effect SQL INSERTs to files.
But in Version 5 of OS/400, CL got even closer through the QShell DB2 utility (see example #1). And with a little research, you can see that the DB2 utility is a symbolic link to program QZDFMDB2 (see example #2).
Still not perfect, but pretty workable.
#1
- Tom Liotta
QSH CMD('db2 "INSERT INTO QIWS.QCUSTCDT (CUSNUM, LSTNAM, INIT) VALUES(876543, ''Liotta'', '')"')
#2
CALL QZDFMDB2 ('INSERT INTO TOML.QCUSTCDT (CUSNUM, LSTNAM, INIT) VALUES(876543, ''Liotta'', ''T'') ')
QZDFMDB2 is a pretty and native solution, but there is a little processor overhead to load and close the QSH.Will have to check if errors can be MONMSGed. Seems a better solution to use it from QSH : QSH interface is published, QZDFMDB2 is an IBM internal tool, interface can change without advertissement.
An other pretty property of QSH DB2 : it's standard output when running a SELECT is a CSV file. Have found a sample at iseries network, lost the link
Here is a complete sample based on previous extract
|
then with STRSQL, work with the file :
select * from jpl/tenlibs +F4 |
|
Now, build a client access DTF to read the file, the simplest dtf : choose the file and that's all (tenlibs.dtf). Open it from Client-Access excel-addin tool bar : tenlibs.xls
|
And direct 400 to excel also
|
Now, work on colum heading and column text Nota : column heading is a one-string value, 60 chars length, showed by SQL as 3 * 20 chars
LABEL ON COLUMN JPL/TENLIBS ( LABEL ON COLUMN JPL/TENLIBS ( |
|
|
|
re run the client acces dtf (tenlibs.dtf) Client Access DTF + excel : column heading continues to be the column name : Client Access don't take care of column heading
|
But direct 400 to excel yes : SQL2SYLK SQL('select * from jpl/tenlibs') IFSFILE('TenLibsLabel.slk') TenLibsLabel.slk
Update the DTF : rename the columns
|
Now, Client Access shows correct headings tenlibs.xls
|
litteral or constants ? at first, it's the same thing
select myfunc('string') from qsys2.qsqptabl is equal to select myfunc(cast('string' as varchar)) from qsys2.qsqptabl
string litterals are automatically casted to varchar
select myfunc(0) from qsys2.qsqptabl is equal to ?
Built'in SQL Data type groups
datalink : datalink
datetime : time timestamp date
character string : char varchar clob
graphic string : graphic vargraphic dblob
binary string : binary varbinary blob
numeric : smallint integer bigint decimal numeric real float
rowid : rowid
details and samples : in sql reference (rbafzmst.pdf) chapter
Language elements / Constants
up to 19 digits, no decimal point, minus sign -> an integer
(bigint ! 20I 0)
2 numbers separated by a E : float 4F or 8F
up to 63, decimal point -> decimal
char -> varying
graphic -> varying
bin -> varying
time timestamp date -> time timestamp date
http://www.itjungle.com/fhg/fhg031704-story02.html shows RPG declarations for SQL data types
RPG, dynamic WHERE, fixed SELECT
In this sample, the format of the returned rows are fixed at compile time
, * this sample shows how to code in RPG the inside-code of a , *================================================================ |
CREATE PROCEDURE LAMONTRE1/READRSP1 () |
-- DROP PROCEDURE LAMONTRE1.READRSP2 ; |
I've not try to change the list of selected columns, but I will test that soon