2010-03-20 10 views
0

Lorsque je crée un répertoire à l'aide sytem utilisateur (vin.txt est mon fichier)Création d'un répertoire?

create directory emp_dir1 
    AS "'C:\Documents and Settings\Administrator\Desktop\vin.txt'"; 

il crée.

Quand je fais la même chose en utilisant l'utilisateur Scott il donne une erreur pour le chemin du fichier qui

"Identifier is too long" 

mais quand je mets ce chemin de fichier entre guillemets simples au lieu de guillemets doubles pour scott, il crée.

Quelle est la raison derrière?

+0

Où le créez-vous? en utilisant quel logiciel? sqlplus? – Dani

Répondre

1

Pourquoi utilisez-vous double-qoutes?

Les chaînes dans Oracle ont des guillemets simples, tandis que les guillemets doubles peuvent être utilisés autour des noms de colonnes et de tables.


Je l'ai essayé en utilisant Oracle 10.2 (ne pas 9g autour), et je ne peux pas reproduire ce. Cela ne fonctionne jamais, quel que soit l'utilisateur que j'utilise.

Lorsque la chaîne est aussi longue que la vôtre, je reçois toujours

ORA-00972: identifiant est trop long

Lorsque je tente un je reçois

chemin plus court ( CREATE DIRECTORY emp_dir1 As "C:\vin.txt";)

ORA-01780: chaîne littérale requise

+0

Je supposais que c'était une faute de frappe, sinon il aurait erré, géré par SYSTEM ou non – APC

+0

@APC: Je suppose que vous avez raison, édité ma réponse. –

1

Un certain nombre de choses me préoccupent à propos de votre question.

Premièrement, les utilisateurs réguliers tels que SCOTT ne devraient pas créer de répertoires. Le CREATE ANY DIRECTORY est extrêmement puissant, car il confère des privilèges de lecture/écriture sur n'importe quel répertoire OS qui est accessible au compte oracle; c'est un énorme trou de sécurité.

Deuxièmement, le chemin du répertoire doit être juste le chemin, sans fichier. Nous créons des fichiers en utilisant UTL_FILE, Data Pump ou autre. Un appel à UTL_FILE.FOPEN() échouera si le DIRECTORY transmis est en réalité un chemin d'accès à un fichier et non un répertoire OS.

Je ne peux pas expliquer pourquoi la même instruction exécutée avec succès par SYSTEM échoue lorsqu'elle est exécutée par SCOTT. Je n'ai pas 9i à portée de main, donc je ne peux pas le tester. Veuillez couper et coller toute la sortie SQL * Plus pour que nous puissions voir ce qui se passe. Comme Peter l'a noté, votre question semblait contenir une faute de frappe, pour le moment, nous ne pouvons pas être certains que ce que vous pensez que se passe réellement est ce qui se passe.

+0

+1, bon point sur la sécurité et sur un 'DIRECTORY' devant être, eh bien, un répertoire. –