vendredi 20 novembre 2009

oracle PLSQL : creer une procedure stockee avec dbms

voici un petit exemple de procedure stockée sans arguments utilisant dmbs_output ... Attention, il est à noter que le buffer dbms_output a une taille par défaut de 20000 et une taille maximum de 1000000 bytes ...

pour le lancer, se connecter sur le serveur, uploader le script sql, et taper :
sqlplus login/password @extractionDbms.sql >> monExtraction.csv

ou sinon, se connecter en sqlplus, et appeler directement la procédure stockée ... attention à ne pas oublié le backslash \ en fin de procédure ou sous sqlplus ...


rem ****************************************************
rem MISE A JOUR DU SCHEMA
rem script : maj_donnees_test_curseur.sql
rem auteur : Capgemini
rem societe : Capgemini
rem ****************************************************

set serveroutput on
spool extraction_test_curseur.csv

declare
CURSOR ListeWagon (pNumeroCmdBoc number,pVersBoc number) IS
select mat.NO_MAT
from tableWagon mat
where mat.no_cmd_boc = pNumeroCmdBoc
and mat.vers_boc = pVersBoc
and rownum <= 5;

/** declaration du curseur*/
CURSOR ListeResultat IS
SELECT
cbov.no_cmd_boc,
cbov.vers_boc,
cbov.etat,
cbov.no_cmd_def,
(SELECT def.etat FROM tableVersionCommande def WHERE def.no_cmd_def = cbov.no_cmd_def and def.vers_def = cbov.vers_def and def.ind_vcour = 1 and cbov.ind_vcour = 1) as etatDef,
cbov.cmc_lv,
cbov.dh_accept,
cbov.dep_ets_ori,
(select LR2_ETS_FER
FROM vueRef referentiel
WHERE referentiel.ETS_FER = cbov.DEP_ETS_ORI
AND referentiel.RES_FER = cbov.DEP_RES_ORI
AND referentiel.D_DEB_ETS_FER <= (TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
AND ((referentiel.D_FIN_ETS_FER + 1) >=
(TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
OR referentiel.D_FIN_ETS_FER IS NULL)
AND ROWNUM = 1) as libelleOri,
cbov.dep_ets_dest,
(select LR2_ETS_FER
FROM vueRef referentiel
WHERE referentiel.ETS_FER = cbov.DEP_ETS_DEST
AND referentiel.RES_FER = cbov.DEP_RES_DEST
AND referentiel.D_DEB_ETS_FER <= (TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
AND ((referentiel.D_FIN_ETS_FER + 1) >=
(TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
OR referentiel.D_FIN_ETS_FER IS NULL)
AND ROWNUM = 1) as libelleDest,
cbov.ccl_ref_cli,
cbov.aff_cli_pay_fa,
(SELECT cli.l_cli FROM tableClient cli WHERE cli.cli = cbov.aff_cli_pay_fa AND D_FIN_CLI IS NULL) as libelleFA,
cbov.aff_cli_pay_fna,
(SELECT cli.l_cli FROM tableClient cli WHERE cli.cli = cbov.aff_cli_pay_fna AND D_FIN_CLI IS NULL) as libelleFNA,
(SELECT m.lib_mot_valo FROM tableMoteur m WHERE cbov.mot_valo = m.code_mot_valo) as mot_valo,
cbov.cmc_tarif_app
from tableOrcVersion cbov
where cbov.dh_accept >= TO_DATE('01/01/2009')
and cbov.dh_accept <= TO_DATE(sysdate, 'dd/MM/yy')
and cbov.cmc_lv <= 10000
UNION
SELECT
cbov.no_cmd_boc,
cbov.vers_boc,
cbov.etat,
cbov.no_cmd_def,
NULL,
cbov.cmc_lv,
cbov.dh_accept,
cbov.dep_ets_ori,
(select LR2_ETS_FER
FROM vueRef referentiel
WHERE referentiel.ETS_FER = cbov.DEP_ETS_ORI
AND referentiel.RES_FER = cbov.DEP_RES_ORI
AND referentiel.D_DEB_ETS_FER <= (TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
AND ((referentiel.D_FIN_ETS_FER + 1) >=
(TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
OR referentiel.D_FIN_ETS_FER IS NULL)
AND ROWNUM = 1) as libelleOri,
cbov.dep_ets_dest,
(select LR2_ETS_FER
FROM vueRef referentiel
WHERE referentiel.ETS_FER = cbov.DEP_ETS_DEST
AND referentiel.RES_FER = cbov.DEP_RES_DEST
AND referentiel.D_DEB_ETS_FER <= (TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
AND ((referentiel.D_FIN_ETS_FER + 1) >=
(TO_DATE(cbov.DH_ACCEPT, 'DD/MM/YY') + 1)
OR referentiel.D_FIN_ETS_FER IS NULL)
AND ROWNUM = 1) as libelleDest,
cbov.ccl_ref_cli,
cbov.aff_cli_pay_fa,
(SELECT cli.l_cli FROM tableClient cli WHERE cli.cli = cbov.aff_cli_pay_fa AND D_FIN_CLI IS NULL) as libelleFA,
cbov.aff_cli_pay_fna,
(SELECT cli.l_cli FROM tableClient cli WHERE cli.cli = cbov.aff_cli_pay_fna AND D_FIN_CLI IS NULL) as libelleFNA,
(SELECT m.lib_mot_valo FROM tableMoteur m WHERE cbov.mot_valo = m.code_mot_valo) as mot_valo,
cbov.cmc_tarif_app
from tableHC cbov
where cbov.dh_accept >= TO_DATE('01/01/2009')
and cbov.dh_accept <= TO_DATE(sysdate, 'dd/MM/yy')
and cbov.cmc_lv <= 10000;

/** declaration des variables */
numeroCmdBoc number(8);
versBoc number(2);
etatCmdBoc number(4);
numeroCmdDef number(8);
etatCmdDef number(4);
numeroExpedition number(6);
dateAcceptation date;
etsOri number(6);
libEtsOri varchar2(12);
etsDest number(6);
libEtsDest varchar2(12);
referenceClient varchar2(35);
codePayeurFA number(7);
libellePayeurFA varchar2(32);
codePayeurFNA number(7);
libellePayeurFNA varchar2(32);
numeroMateriel number(12);
moteurValorisation varchar(25);
tarifApplique number(7);

/** liste des wagons */
buffer VARCHAR2(255);
begin
DBMS_OUTPUT.ENABLE(1000000);
dbms_output.put_line('debut extraction');
/** creer des libelles de colonnes */
buffer := 'cmdBOC' || ';' || 'etat' || ';' || 'cmdDEF' || ';' || 'etatCmdDef' || ';' || 'numExp' || ';' || 'dateAccept' || ';' || 'codeEtsOri' || ';' || 'libEtsOri' || ';' || 'codeEtsDest' || ';' || 'libEtsDest' || ';' || 'refClient' || ';' || 'codeCliPFA' || ';' || 'libCliPFA' || ';' || 'codeCliPNFA' || ';' || 'libCliPNFA' || ';' || 'numMat' || ';' || 'motValo' || ';' || 'tarApp' || ';';
dbms_output.put_line(buffer);
/** ouverture du curseur */
Open ListeResultat;

Loop
-- Pour chaque jour sélectionné
Fetch ListeResultat Into numeroCmdBoc,versBoc,etatCmdBoc,numeroCmdDef,etatCmdDef,numeroExpedition,dateAcceptation,etsOri,libEtsOri,etsDest,libEtsDest,referenceClient,codePayeurFA,libellePayeurFA,codePayeurFNA,libellePayeurFNA,moteurValorisation,tarifApplique;
Exit When ListeResultat%NOTFOUND;
-- creer les lignes
Open ListeWagon (numeroCmdBoc,versBoc);
Loop
Fetch ListeWagon Into numeroMateriel;
Exit When ListeWagon%NOTFOUND;
buffer := numeroCmdBoc || ';' || etatCmdBoc || ';' || numeroCmdDef || ';' || etatCmdDef || ';' || numeroExpedition || ';' || dateAcceptation || ';' || etsOri || ';' || libEtsOri || ';' || etsDest || ';' || libEtsDest || ';' || referenceClient || ';' || codePayeurFA || ';' || libellePayeurFA || ';' || codePayeurFNA || ';' || libellePayeurFNA || ';' || numeroMateriel || ';' || moteurValorisation || ';' || tarifApplique || ';';
dbms_output.put_line(buffer);
End Loop;
Close ListeWagon;
End loop ;

/** liberation ressources */
Close ListeResultat ;
dbms_output.put_line('fin extraction');
end;
/
spool off;
/





Un second exemple utilisant une ecriture directe dans un fichier ... Attention, il faut noter qu'il est nécessaire de disposer d'un "directory oracle" configuré par le DBA ... Le fichier se trouvera dans le directory ... (ici nommé EXTRACT et correspond à un chemin sur le filesystem du serveur).


SET SERVEROUTPUT ON;

/** declaration methode extraction */
create or replace procedure extraction is
/** declaration du curseur*/
CURSOR ListeResultat IS
select
vcmd.no_cmd_boc,
vcmd.etat,
vcmd.no_cmd_def,
vcmd.cmc_lv,
vcmd.dh_accept,
vcmd.aff_cli_pay_fa,
(SELECT L_CLI
FROM CLIENT client
where client.cli = vcmd.aff_cli_pay_fa
and client.d_deb_cli <= TO_DATE(sysdate, 'dd/MM/yy')
and (client.d_fin_cli is null or client.d_fin_cli >= TO_DATE(sysdate, 'dd/MM/yy')
) and rownum=1
) as libelleFA,
vcmd.aff_cli_pay_fna,
(SELECT L_CLI
FROM CLIENT client
where client.cli = vcmd.aff_cli_pay_fna
and client.d_deb_cli <= TO_DATE(sysdate, 'dd/MM/yy')
and (client.d_fin_cli is null or client.d_fin_cli >= TO_DATE(sysdate, 'dd/MM/yy')
) and rownum=1
) as libelleFNA,
vcmd.ccl_ref_cli,
wagons.no_mat,
vcmd.mot_valo,
vcmd.cmc_tarif_app,
vcmd.cmc_typ_valo_tarif
from VERSIONCMD vcmd, WAGON wagons
where vcmd.dh_accept >= TO_DATE('01/01/2009')
and vcmd.dh_accept <= TO_DATE(sysdate, 'dd/MM/yy')
and vcmd.cmc_lv <= 10000
and wagons.no_cmd_boc = vcmd.no_cmd_boc and wagons.vers_boc = vcmd.vers_boc;

/** declaration des variables */
numeroCmdBoc number(8);
etatCmdBoc number(4);
numeroCmdDef number(8);
numeroExpedition number(6);
dateAcceptation date;
codePayeurFA number(7);
libellePayeurFA varchar2(32);
codePayeurFNA number(7);
libellePayeurFNA varchar2(32);
referenceClient varchar2(35);
numeroMateriel number(12);
moteurValorisation number(1);
tarifApplique number(7);
typeTarif number(1);

/** fichier de sortie */
file utl_file.file_type;
buffer VARCHAR2(1024);
/** traitement */
begin
/** ouverture fichier dasn le directory */
file := utl_file.fopen('EXTRACT','extraction.csv','W');
/** creer des libelles de colonnes */
buffer := 'n° de commande BOC' || ';' || 'etat de la commande BOC' || ';' || 'n° de commande DEF' || ';' || 'n° d’expédition' || ';' || 'date acceptation' || ';' || 'code client PFA' || ';' || 'libelle client PFA' || ';' || 'code client PNFA' || ';' || 'libelle client PFA' || ';' || 'reference client' || ';' || 'numero materiel' || ';' || 'moteur de valorisation' || ';' || 'tarif applique' || ';' || 'type de tarif';
utl_file.put_line(file,buffer);
/** ouverture du curseur */
Open ListeResultat;

Loop
-- Pour chaque jour sélectionné
Fetch ListeResultat Into numeroCmdBoc,etatCmdBoc,numeroCmdDef,numeroExpedition,dateAcceptation,codePayeurFA,libellePayeurFA,codePayeurFNA,libellePayeurFNA,referenceClient,numeroMateriel,moteurValorisation,tarifApplique,typeTarif;
Exit When ListeResultat%NOTFOUND;
-- creer les lignes

buffer := numeroCmdBoc || ';' || etatCmdBoc || ';' || numeroCmdDef || ';' || numeroExpedition || ';' || dateAcceptation || ';' || codePayeurFA || ';' || libellePayeurFA || ';' || codePayeurFNA || ';' || libellePayeurFNA || ';' || referenceClient || ';' || numeroMateriel || ';' || moteurValorisation || ';' || tarifApplique || ';' || typeTarif;
utl_file.put_line(file,buffer);
End loop ;

/** liberation ressources */
Close ListeResultat ;
utl_file.fclose(file);
end extraction;

vendredi 13 novembre 2009

unix : remplacement de chaine avec sed ou sous vi

Pour remplacer une occurence d'une chaine un peu partout dans un fichier (ici myfile.txt) :

il est possible d'utiliser la commande sed :

ici la première occurence trouvée dans le fichier myfile.txt de 'chaineDepart' sera remplacée par 'nouvelleChaine', et le resultats sera affiché dans stdout...
sed -e 's/chaineDepart/nouvelleChaine/' myfile.txt

ici toute les occurences trouvées dans myfile.txt sont remplacées et le tout est redirigé vers le fichier myfile_new.txt
sed -e 's/chaineDepart/nouvelleChaine/g' myfile.txt > myfile_new.txt

ici, la même chose mais de la ligne 2 à 10 incluses ...
sed -e '2,10s/chaineDepart/nouvelleChaine/g' myfile.txt > myfile_new.txt

ici, un très bonne article ...

il est possible d'utiliser sous vim :
ici toute les occurences trouvées dans le fichier edité sont remplacées :%s/texte_à_trouver/nouveau_texte/g


ici, un très bonne article ...

jeudi 12 novembre 2009

putty : créer un tunnel ...

J'ai besoin d'accéder a un port particulier auquel je n'ai pas accès directement, mais auquel une autre machine a accès ... Dans mon cas, je veux accéder à une console weblogic situé sur mon serveur "cible" sur le port 7001, et je n'ai qu'accès à un autre serveur "dit accessible" (qui lui a accès au serveur de cible et au port 7001) ...

Il faut donc que je crée un tunnel ssh ... avec putty ...
1) configurer putty :



Tout d'abord on se rend sur la rubrique Tunnels de putty ...
ici, on voit que ds source port, je mets mon PC en local 127.0.0.2:11151
et que je mets dans destination port le serveur et le port cible : 10.14.51.139:11151
et ne pas oublier d'appuyer sur "add"

A noter qu'il faut faire attention aux translation d'adresse IP (ici l'adresse IP, il faut mettre l'adresse IP du serveur "cible" vu par le serveur "accèdé"


2) Se connecter au serveur accessible via ssh ... le tunnel est fait ...

3) Le tunnel est fait, maintenant je lance mon browser sur http://localhost:11151/console ... et c'est magique j'obtient le display de la console weblogic !!!

vendredi 6 novembre 2009

linux : afficher l'espace disque utilisé ou la taille de repertoire

La commande df affiche l'ensemble des points de montage et l'espace occupé, et l'option -h permet un affichage "human readable" :

df -h

La commande du affiche l'ensemble des points de montage et l'espace occupé, et l'option -h permet un affichage "human readable" :

du -h --max-depth=1

mardi 3 novembre 2009

linux : trouver un process qui utilise un port

la commande netstat -ap permet d'afficher les port et n° de PID qui utlise le port ... le grep fait un filtre ...
netstat -ap | grep 7670