Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Suivre ce blog Administration + Créer mon blog
MENU
Publicité
Attn's blog
Articles récents

Vous développez sur quel OS ?

28 Novembre 2008 , Rédigé par Milan Publié dans #Cl - system & cie

CPF,

OS/400,

i5/OS
i for Business

 

Hum, @ suivre...

Lire la suite
Publicité

dt9 & dt10

23 Novembre 2008 , Rédigé par Milan Publié dans #Sql

 

// Deux fonctions qui permettent de transformer une pseudo date en vraie date.


// Dans DB2 LUW une fonction, qui utilise alors le “SQL inline”, ne peut utiliser de Handler, c'est la raison pour laquelle DT10 appelle la procédure DT10A, qui elle, a accès à toutes les instructions SQL PL.


// Les choses sont plus simples sur AS400 où une telle gymnastique n'est pas nécessaire...

Bravo le i !



values dt9(991124)#

values dt9(19991225)#


values dt10('1987-12-25')#


values dt10(dt9(19980513))#

values dt10(dt9(380722))#


values dt10(dt9(701133))#



****************************

 

create function dt9


-- une pseudo date 6 ou 8 numérique amj ou samj

(zn dec(8, 0))


-- une pseudo date alpha formatée iso avec séparateur

-- (qui peut être vérifiée

-- et transformée en vrai date par dt10)

returns varchar(10)

 

language sql

 

a010: begin atomic

declare za char(8);

declare aan decimal(4, 0);

declare aa char(4);

declare mm char(2);

declare jj char(2);

 

-- l'année

set aan = zn/10000;

-- s'il s'agit d'une date sur 6, complément 19 ou 20.

if aan <= 99 then

if aan > 40 then

set aan=aan+1900;

else

set aan=aan+2000;

end if;

end if;

 

set aa = digits(aan);


--dans une zone alpha pour extraction

set za = digits(zn);


-- le mois

set mm = substr(za, 5, 2);

 

-- le jour

set jj = substr(za, 7, 2);

 

-- assemblage final

return aa concat '-' concat mm concat '-' concat jj;

end #


 

 

 

****************************

 

  


create function dt10


-- une pseudo date alpha avec séparateur

(za10 varchar(10))


-- une vraie date, ou null si la date passée est incorrecte.

returns date

 

aa: begin atomic

declare madate date;

call dt10a(za10, madate);

return madate;

end #





create procedure dt10a(in za10 varchar(10), out madate date)

reads sql data

language sql


a010: begin

declare errw int default 0;

declare continue handler for sqlexception set errw=1;

 

set madate = cast(za10 as date);

 

if errw =0 then return;

else

set madate = null;

return errw;

end if;

 

end #

Lire la suite

Java où ?

13 Novembre 2008 , Rédigé par Milan Publié dans #Ah !

Lire la suite

Julie

8 Novembre 2008 , Rédigé par Milan Publié dans #Ah !


Julie la rousse !

Lire la suite
Publicité

Date

28 Octobre 2008 , Rédigé par Milan Publié dans #Sql

select current date from sysibm.sysdummy1;

select current date + 65 day from sysibm.sysdummy1;

select cast('2007-02-26' as date) + 2 year - 3 month + 29 day
as toto from sysibm.sysdummy1 ;

select date('2007-01-31') + 1 month as toto from sysibm.sysdummy1 ;
/* génère un avertissement sqlstate 01506, vous devinez pourquoi ? */



select date('2007-12-30') - date('2005-12-31') from sysibm.sysdummy1;
/* Le résultat, numérique, est de la forme aaaammjj.

Ici, 1 année, 11 mois et 30 jours */

select day(current date) from sysibm.sysdummy1;
/* Le jour */

 select dayname(current date) from sysibm.sysdummy1;
/* le jour en clair */

 select month(current date) from sysibm.sysdummy1;
/* Le mois */

 select year(current date) from sysibm.sysdummy1;
/* L'année */

 

 select days(current date) from sysibm.sysdummy1;
/* Le nombre de jour depuis le 01/01/001 */

 select days(current date) - days('2000-01-01') from sysibm.sysdummy1;
/* Combien de jour depuis l'an 2000 ? */

Lire la suite

Acrostiche

23 Octobre 2008 , Rédigé par Milan Publié dans #Ah !

Je ne saurais nommer celle qui sait me plaire.
Un fat peut se vanter, un amant doit se taire.
La pudeur qu'alarmait l'impétueux désir
Inventa sagement le voile du mystère
Et l'amour étonné connut le vrai plaisir.


// On ne connait pas, semble-t-il, l'auteur de ces vers...

Lire la suite

mdy2yymd

18 Octobre 2008 , Rédigé par Milan Publié dans #Sql

//  Nous voici dans l'aspect procédurale de SQL, 
// SQL PSM (Persistent Stored Modules) ou SQL PL (Procedural Language) ou SPL

// Certains fichiers systèmes AS/400 gérent les dates à l'aide de 2 champs,
// La fonction SQL ci-dessous les rend un peu plus pratique - pour le tri - et lisible...
 
drop function mdy2yymd £


create function mdy2yymd (
cent varchar(1) ,
mdy varchar(6) )

returns char(8)

 

a1: begin atomic
declare yy char ( 2 ) ;
declare yymd char ( 8 ) ;

 

if cent='0' then
set yy ='19';
elseif cent='1' then
set yy ='20';
end if;

 

set yymd = yy ||
substr ( mdy , 5 , 2 ) ||
substr ( mdy , 1 , 2 ) ||
substr ( mdy , 3 , 2 ) ;

return yymd ;

end £

 

 

select mdy2yymd('0', '123198') date from sysibm.sysdummy1 £

 

Voici un lien vers la doc "IBM i"
Et un vers "DB2 LUW"

Attn, concernants notamment les "control statements", il existe des différences souvent étranges entre les 2 systèmes... Par exemple, sur AS/400, la fonction ci-dessus peut être écrite avec un

    case

    when cent='0' then set yy ='19';
    when cent='1' then set yy ='20';
              
  end case;  


 
alors que cette instruction de test n'est pas possible dans une fonction sur DB2 LUW... Bravo le "i" !

Lire la suite

Vieil Hareng Saur

16 Octobre 2008 , Rédigé par Milan Publié dans #Ah !

Autre kakemphaton :

J'en sortirai du camp, mais quel que soit mon sort,
J'aurai montré du moins comme un vieillard en sort !

Adolphe Dumas, Le Camp des Croisés
 
Lire la suite
Publicité

Kakemphaton

15 Octobre 2008 , Rédigé par Milan Publié dans #Ah !

"Je suis romaine, hélas, puisque mon époux l'est."

Corneille, Horace, 1°ed., 1641

Lire la suite

Envie

13 Octobre 2008 , Rédigé par Milan Publié dans #Ah !

"Et bien moi, je crois qu'on ne réussit qu'une seule chose, on ne réussit que ses rêves.
Le talent, ça n'existe pas. Le talent c'est d'avoir l'envie de faire quelque chose, et je crois que l'envie de réaliser un rêve, c'est le talent.
Et tout le restant, c'est de la sueur, c'est de la transpiration, c'est de la discipline.
Je suis sûr de ça.
L'art, moi, je n'sais pas ce que c'est, les artistes, je connais pas."

Jacques Brel
Lire la suite

Evénement

8 Octobre 2008 , Rédigé par Milan Publié dans #Ah !

"Il faut prendre l'événement par la main avant d'être pris par lui à la gorge"

W. Churchill

Lire la suite

Boum !

2 Octobre 2008 , Rédigé par Milan Publié dans #Ah !

"Laisse tomber, ça va rebondir..."
Lire la suite
Publicité

Ongle

27 Septembre 2008 , Rédigé par Milan Publié dans #Analyse

 
Avec son ongle, Hans grava une injonction glorieuse sur le mur :
"Braver toutes les forces contraires"

Le Droit Chemin ; Munich, Hiver 43
Pascal Lesur
 

Lire la suite

Saoufé

10 Septembre 2008 , Rédigé par Milan Publié dans #Ah !


Lire la suite

Cobol écran

9 Septembre 2008 , Rédigé par Milan Publié dans #Cobol

Il existe mainte façon de coder un programme interactif en Cobol 400...
Ici, parti-pris a été de déclarer les zones du fichier écran (dds) en both, éventuellement limitées par dspatr(pr) et chginpdft,  de manière à n'utiliser qu'un seul buffer (le i bien sûr !).
N'oublions pas indara.

Le lecteur audacieux enrichira sa réflection en comparant ce source avec celui-ci !

ID DIVISION.
PROGRAM-ID. ZFIC045.

* saisie 2
* date
* zones en B

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

SELECT ecranfm ASSIGN TO WORKSTATION-zfic045fm-si
ORGANIZATION TRANSACTION.

SELECT zfic010p ASSIGN TO DATABASE-zfic010p
RECORD KEY EXTERNALLY-DESCRIBED-KEY
ORGANIZATION INDEXED
ACCESS random.


DATA DIVISION.
FILE SECTION.

FD zfic010p.
01 zfic010p01.
COPY DDS-ALL-FORMATS OF zfic010p.

FD ecranfm.
01 ecran pic x(1920).



WORKING-STORAGE SECTION.

01 lesindics.
02 tc pic 1 occurs 99 indic 1.

01 ecranw1-es.
copy dds-ecranw1-i of zfic045fm.

01 ecranw2-es.
copy dds-ecranw2-i of zfic045fm.

77 identw2 pic x(5).
77 trtw pic x(10).


PROCEDURE DIVISION.
debut.

open i-o ecranfm
open i-o zfic010p

write ecran                                     Fond 1°affichage.
format is "ECRAN01" indic are tc.

initialize ecranw1-i

move "ecranw1" to trtw. 1°écran


boucle.
perform with test after until trtw = "fin"      Boucle générale


if trtw = "ecranw1"

write ecran from ecranw1-i
format is "ECRANW1" indic are tc            Fenetre ou l'on saisi
read ecranfm into ecranw1-i                 la clé du fichier.
format is "ECRANW1" indic are tc
if tc(03) = b"1" or tc(12) = b"1"
move "fin" to trtw Fin.
go to boucle
end-if

move " " to messw

if identw of ecranw1-i = 0
move b"1" to tc(51)                          Ctrl saisie
go to boucle
end-if

move identw of ecranw1-i to ident of zfic010p01   Chain du
read zfic010p with no lock                        fichier

invalid key
move b"1" to tc(21)                               non trouvé
initialize zfic010f
move 20010101 to zd1 of zfic010f
move 20020202 to zd2 of zfic010f

not invalid key
move b"0" to tc(21)                                trouvé
end-read

move corr zfic010f to ecranw2-i
move identw of ecranw1-i to ident of ecranw2-i

move b"0" to tc(89)                          Témoin touché
move "ecranw2" to trtw                       Ecran suivant

end-if


if trtw = "ecranw2"

write ecran from ecranw2-i
format is "ECRANW2" indic are tc         Fenetre de saisie
read ecranfm into ecranw2-i
format is "ECRANW2" indic are tc
if tc(03) = b"1"
move "fin" to trtw                            Fin.
go to boucle
end-if
if tc(12) = b"1"
move "ecranw1" to trtw                         Retour.
go to boucle
end-if

if tc(88) = b"1"                              Change
move b"1" to tc(89)                           Touché
end-if

if tc(23) = b"1"                             Suppression

write ecran
format is "ECRCONF" indic are tc              Fenetre de
read ecranfm                                  confirmation
format is "ECRCONF" indic are tc
if not (tc(03) = b"1" or tc(12) = b"1")       Si "entrée"
move "maj" to trtw                            Suppression
else
continue
end-if
go to boucle
end-if

if za1 of ecranw2-i = " "
move b"1" to tc(51)                          Ctrl saisie
go to boucle
end-if

if za2 of ecranw2-i = " "
move b"1" to tc(52)                          Ctrl saisie
go to boucle
end-if

if tc(88) = b"1"                          Réaffichage si
go to boucle                              change
end-if

if tc(89) = b"1"
move "maj" to trtw                       Maj
else
move "ecranw1" to trtw                  Retour 1° écran
move 0 to identw of ecranw1-i
end-if

end-if


if trtw = "maj"

move corr ecranw2-i to zfic010f
if tc(23) = b"1"
delete zfic010p                          Suppression
invalid key
move "Opération NON effectuée !" to messw  Situation
move "ecranw1" to trtw                     inatendue !
go to boucle                            Retour 1°écran
not invalid key
move "supprimé" to messw(7 : )
end-delete
else
if tc(21) = b"1"
write zfic010p01                          Création
invalid key
move "Opération NON effectuée !" to messw  Situation
move "ecranw1" to trtw                     inatendue !
go to boucle                             Retour 1°écran
not invalid key
move "créé" to messw(7 :)
end-write
else
rewrite zfic010p01                        Mise à jour
invalid key
move "Opération NON effectuée !" to messw  Situation
move "ecranw1" to trtw                     inatendue !
go to boucle                           Retour 1°écran
not invalid key
move "modifié" to messw(7 : )
end-rewrite
end-if
end-if

move ident of zfic010f to identw2
move identw2 to messw(1 : 5)
move "ecranw1" to trtw               Retour 1° écran
move 0 to identw of ecranw1-i

end-if


end-perform                           Boucle générale


goback. Fin

Lire la suite

Risque

4 Septembre 2008 , Rédigé par Milan Publié dans #Cl - system & cie

Il ne faut pas oublier que le System 38 qui est à l’origine de l’OS/400 a été financé dans les années 80 sur un budget supplémentaire car le laboratoire Rochester voulait placer le management d’ IBM devant le fait accompli.
Comme l’écrivait Frank Soltis dans son livre à ce sujet : 
« il est plus efficace de prendre le risque d’être réprimandé après coup que de demander en vain».
Donc l’OS/400 est né de la compétence d’une équipe de visionnaires, du génie de Frank Soltis et de l’audace d’un laboratoire isolé dans des champs de maïs du Minnesota.

Extrait d'une lettre de www.repeglio.com    merci à Jean Mikhaleff   ;-))
 

Lire la suite
Publicité

Belem

10 Août 2008 , Rédigé par Milan Publié dans #Ah !

     


Lire la suite

Les 20 ans !

7 Juin 2008 , Rédigé par Milan Publié dans #Ah !

L'AS/400 - 20 * 20 - a 20 ans !
Souvenirs souvenirs chez Logix
 
Lire la suite

Voyage à l'intérieur de l'AS/400 (as400)

17 Mai 2008 , Rédigé par Milan Publié dans #Rpg

Achetez mon produit sur PriceMinister
Soltis, Frank : Voyage À L'intérieur De L'as/400 (As400) (Livre) - Livres et BD d'occasion - Achat et vente

29,00 €

Voyage À L'intérieur De L'as/400 (As400)
Très Bon Etat
Soltis, Frank
Un "Collector", en Français, 1996, par Frank G. Soltis, l'un des pères de l'IBM System/38, AS/400, iSeries, System i, maintenant Power... La genèse de ce magnifique système. Ce n'est pas un manuel...
Voir ma boutique

 

Retrouvez Voyage À L'intérieur De L'as/400 (As400) dans la rubrique Livres sur PriceMinister


Plus d'info sur www.attn.fr 
 

Lire la suite

L'inverse ?

5 Avril 2008 , Rédigé par Milan Publié dans #Analyse

Réné Char disait qu'il faut penser en stratège et agir en primitif.
Et si c'était l'inverse
?

Lire la suite
Publicité
<< < 10 11 12 13 14 15 16 17 18 19 20 > >>