Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2005, 16h28   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 98
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 98
Points : 25
Points : 25
Par défaut Execution Script PL/SQL

Bonjour à tous,
j'essaie de faire un script PL/SQL qui mettrais le nombre de records d'une table dans une variable qui serait utilisée par la suite.
Voici le contenu de mon fichier test.txt (juste récupération et affichage de la valeur):

Code :
1
2
3
4
5
6
7
8
9
10
DECLARE
	LC$leChamp NUMBER; 
	Cursor C_Curs IS SELECT count(*) FROM maTable; 
BEGIN 
	SET SERVEROUTPUT ON;
	Open C_Curs (); 
		Fetch C_Curs INTO LC$leChamp; 
		DBMS_OUTPUT.PUT_LINE(LC$leChamp) ; 
	Close C_Curs ;	
END ;
En Sql*Plus je tape: execute c:\monRepertoire\test.txt
le script ne s'execute pas et je dois faire Ctrl+C pour sortir puis r pour le lancer... :?
Et la, il m'affiche:

Code :
1
2
3
4
5
ERROR à la ligne 1 :
ORA-06550: Ligne 5, colonne 6 :
PL/SQL: ORA-00922: OPTION erronée ou absente
ORA-06550: Ligne 5, colonne 2 :
PL/SQL: SQL Statement ignored
Est-ce que la facon dont j'appelle le script est correct ? est ce que le PL/SQL est executable en SQL*PLUS ? ou encore autre chose ?
Ca doit être basique mais je ne trouve vraiment pas...
Si qqun sais m'aider

Merci
HH :wink:
hair_peace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 16h34   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Bonjour et bienvenue,

Merci de bien vouloir sélectionner OUI dans l'option
Code :
Toujours autoriser le BBCode
de ton profil pour profiter de ta mise en page (j'ai édité ton message)

il doit manquer un / à la fin :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
DECLARE
   LC$leChamp NUMBER;
   Cursor C_Curs IS SELECT count(*) FROM maTable;
BEGIN
   SET SERVEROUTPUT ON;
   Open C_Curs ();
      Fetch C_Curs INTO LC$leChamp;
      DBMS_OUTPUT.PUT_LINE(LC$leChamp) ;
   Close C_Curs ;   
END;
/
Mais peut-être qu'une procédure stockée serait plus adaptée :

Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE OR REPLACE ma_proc AS
   LC$leChamp NUMBER;
   Cursor C_Curs IS SELECT count(*) FROM maTable;
BEGIN
   SET SERVEROUTPUT ON;
   Open C_Curs ();
      Fetch C_Curs INTO LC$leChamp;
      DBMS_OUTPUT.PUT_LINE(LC$leChamp) ;
   Close C_Curs ;   
END;
/
Et sous SQL*Plus :

orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 16h38   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
SET SERVEROUTPUT ON est une commande Sql*Plus non reconnue dans un bloc PL/SQL
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 16h42   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ha oui, il y a ça aussi
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 16h58   #5
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Et c'est quoi la différence entre et
Code :
SQl>execute monscript.sql
? Le premier exécute du SQL et le 2e du PL/SQL ?
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 17h06   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
non c'est :
ou

dans le 1° cas tu exécutes le PL/SQL du fichier dans le 2° tu exécutes le PL/SQL stocké en base via la procedure
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 17h10   #7
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 98
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 98
Points : 25
Points : 25
Merci pour cette réponse si rapide orafrance et SheikYerbouti

C'est en effet plus pratique en créant une procédure.
Et SERVEROUPUT ON n'est en effet pas reconnue sous SQL*PLUS.

Merci ++
hair_peace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 17h17   #8
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Euh mais dans ce cas
Code :
execute c:\monRepertoire\test.txt
ne peux pas marcher non ?? C'est peut-être ça son erreur principale, non ?
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 17h27   #9
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 98
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 98
Points : 25
Points : 25
Code :
ne peux pas marcher non ?? C'est peut-être ça son erreur principale, non ?
C'était une de mes erreures principales, effectivement !!! J'ai donc remplacé "execute " par "@".
hair_peace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 17h42   #10
Membre du Club
 
Inscription : mai 2005
Messages : 134
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 134
Points : 50
Points : 50
Citation:
non c'est :
Code:

@monscript.sql


ou

Code:
execute procedure


dans le 1° cas tu exécutes le PL/SQL du fichier dans le 2° tu exécutes le PL/SQL stocké en base via la procedure Wink
Je pensais que "@" et "execute" étaient identique et que call exécute le PL/SQL stocké en base via la procedure ?

Non ?
jokos2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 17h52   #11
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Une chose est sûre, ils ne sont pas identiques... vu comme il me jette quand je tente un execute monfichier.sql ...
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2005, 20h29   #12
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
@ est suivi d'un fichier alors que execute est suivi d'une procédure
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 09h55   #13
Rédacteur/Modérateur
 
Inscription : janvier 2005
Messages : 2 320
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 320
Points : 2 368
Points : 2 368
Citation:
Envoyé par jokos2000
Je pensais que "@" et "execute" étaient identique et que call exécute le PL/SQL stocké en base via la procedure ?

Non ?
@ et equivalent à start
Jaouad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2005, 10h55   #14
Membre du Club
 
Inscription : mai 2005
Messages : 134
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 134
Points : 50
Points : 50
ok !!!!!

Donc @ == start et execute == call ?
jokos2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h27.


 
 
 
 
Partenaires

Hébergement Web