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 01/05/2007, 02h07   #1
Invité de passage
 
Inscription : mai 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 9
Points : 1
Points : 1
Par défaut créer un lien vers un repertoire en pl/sql

Voilà, j'aimerais savoir si c'est possible de créer un lien vers un repertoire
comme on peut le faire ainsi :

Code :
1
2
 
CREATE OR REPLACE directory testDir AS 'c:\temp';
J'aimerais faire cela mais dans une procédure pl/sql

Code :
1
2
3
4
5
6
7
8
9
10
 
 
CREATE OR REPLACE procedure changeDirectory(p_chemin Varchar2)
IS
 
begin
  CREATE OR REPLACE directory BLOBDIR AS p_chemin;
end;
/
SHOW errors
j'obtiens cette erreur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Erreurs pour PROCEDURE CHANGEDIRECTORY :
 
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/3      PLS-00103: Symbole "CREATE" rencontré à la place d'un des
         symboles suivants :
         begin case declare exit for goto if loop mod null pragma
         raise return select update while with <an identifier>
         <a double-quoted delimited-identifier> <a bind variable> <<
         close current delete fetch lock insert open rollback
         savepoint set sql execute commit forall merge
         <a single-quoted SQL string> pipe
jr_momo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 08h59   #2
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
salut,
pour faire des opération DDL en PL/SQL tu dois le faire via du SQL dynamique.

fais une recherche sur ce forum avec "SQL Dynamique" et tu trouveras ton bonheur.
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 08h59   #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
En PL/SQL, les ordres du DDL doivent passer par le sql dynamique

Code :
execute immediate 'create directory ...' ;
de plus, les droits sur ces objets doivent avoir été donné directement et non via un simple rôle.
__________________
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 01/05/2007, 13h32   #4
Invité de passage
 
Inscription : mai 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 9
Points : 1
Points : 1
Par défaut Procdeure créée sans erreur mais problème lors de l'execution

Code :
1
2
3
4
5
6
7
8
9
 
CREATE OR REPLACE procedure changeDirectory(p_chemin Varchar2)
IS
 
begin
  execute immediate 'CREATE OR REPLACE directory BLOBDIR AS' || p_chemin;
end;
/
SHOW errors
Voici la procédure elle est bien créée par contre lorsque je l'execute j'ai une erreur

Code :
1
2
 
exec changedirectory('c:\temp\');
Code :
1
2
3
4
5
6
7
8
 
BEGIN changedirectory('c:\temp\'); END;
 
*
ERREUR à la ligne 1 :
ORA-00905: Mot-clé absent
ORA-06512: à "SYSTEM.CHANGEDIRECTORY", ligne 5
ORA-06512: à ligne 1
jr_momo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 13h53   #5
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
c'est une petit piège classique...

ajout un espace après le AS (avant la fermeture que la quote) de l'ordre donnée dans le execute immediate... sinon le AS est collé avec ton paramètre
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 14h20   #6
Invité de passage
 
Inscription : mai 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 9
Points : 1
Points : 1
Par défaut erreur trouvée merci de l'aide

Code :
1
2
3
4
5
6
7
8
9
10
11
 
CREATE OR REPLACE procedure changeDirectory(p_chemin Varchar2)
IS
 
begin
  EXECUTE IMMEDIATE 
  'CREATE OR REPLACE DIRECTORY BLOBDIR '||' AS '''||p_chemin||'''';
 
end;
/
SHOW errors
Cependant il faut avoir les drois d'administrateur pour exectuer cette procédure.
En fait, il faut se connecter en system mais en tant que sysDBA.
jr_momo 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 02h19.


 
 
 
 
Partenaires

Hébergement Web