mis à jour d'une DB Oracle grace à des scripts shell

lechatbotte

Nouveau membre
Bonjour,

J'ai réalisé un menu en shell (korn shell) qui permet de gérer des stocks de produits. Il se présente à l'utilisateur de la manière suivante :

MENU

1. Mettre un produit en stock (le ranger dans une caisse)
2. Mettre un produit en rayon (le sortir d'une caisse)
3. Supprimer un produit des rayons
4. Connaitre le statut d'un produit


L'utilisateur choisit donc l'action qu'il souhaite. Les produits en stock sont rangés dans des caisses qui sont numérotées. Les produits et les caisses sont tous référencés dans une base de données Oracle qui contient 2 tables : PRODUIT et CAISSE.

La DB a été crée, j'y accède par l'intermédiaire de PL/SQL et peut faire mes requêtes correspondant aux actions du menu.
Mon problème est que j'ignore comment je pourrais intégrer mes requêtes dans mes scripts shell, pour que les mises à jour soient effectuées sur la DB.

Une aide me serait extrèmement précieuse, merci !!
 

KangOl

Grand Maître
je ne pense pas que ce soit possible en shell, ca n'a pas ete concu pour interférer avec une base de donnée...

a moins que tu puisse lancer un programme avec une ligne de commande et les parametres qui vont bien...
 

cisco

Habitué
si si c'est possible

dans ton script shell tu peut appeler sqlplus

par exemple

[fixed]
#!/bin/ksh

sqlplus user/password @startfile.sql > log/startfile.log

[/fixed]

ici startfile.sql est le fichier ou tu a mis ta requete sql

par exemple

[fixed]
set serveroutput off;

prompt ****************************************************
prompt Un message :
prompt ****************************************************

select code_site CODE_GP
from ...
where code_site not like '%E'
and code_site not like '%W'
minus
select substr( code, 2, 5 )
from site...;

[/fixed]

tu peut aussi executer des procédure stockée (c'est plus propre...)
[fixed]
pool off;

exec schemaName.pk_name.procedure_name;

[/fixed]
 

cisco

Habitué
J'oubliai le sql loader d'oracle qui est puissant: Tu te debrouille pour avoir tes données dans un fichier, et tu charge le fichier a l'aide de sqloader

[fixed]
#!/bin/ksh
sqlldr user/password control=startfile.ctl log=log/startfile_LDR.log
[/fixed]

ou ici startfile.ctl est du style

[fixed]
LOAD DATA
INFILE 'data/produit.csv' BADFILE 'log/produit.bad'

REPLACE
INTO TABLE PRODUIT
FIELDS TERMINATED BY ";"
TRAILING NULLCOLS
(
type,
num,
reg,
...
on_line date "DDMMYYYY"
)
[/fixed]

faut adapter hein (le fichier chargé ici est produit.csv, les champs sont sépararé par un ";")
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 126
Messages
6 717 810
Membres
1 586 365
Dernier membre
matiOs1
Partager cette page
Haut