web-dev-qa-db-fra.com

Lire le fichier texte pour insérer des données dans la table Oracle SQL

J'étudie développeur Oracle SQL.

Ce que je fais est la lecture de fichier texte ligne par ligne à partir du dossier. Ensuite, insertion de données dans la table SQL.

Je suis capable de compiler ma PROCEDURE, cependant, il ne semble pas insérer les données dans un fichier.

Create or Replace PROCEDURE Rfile is
f UTL_FILE.FILE_TYPE;
s VARCHAR2(200); 
BEGIN
f := UTL_FILE.FOPEN('C:\Projects\','testdatabinary.txt','R');
  IF UTL_FILE.IS_OPEN(f) THEN
    LOOP
      BEGIN
        UTL_FILE.GET_LINE(f,s);
        IF s IS NULL THEN
          EXIT;
        END IF;
      INSERT INTO DATAINSERT
      (COLUMN1, COLUMN2)
      VALUES
      (s, 'testdatabinary');
      END;
  END LOOP;
  COMMIT;
  END IF;
 END;

Et j'ai une table DATAINSERT avec deux colonnes de type varchar (200)

Je ne suis pas vraiment sûr des raisons pour lesquelles PROCEDURE n'insère pas de données dans un tableau

Je viens de vérifier le message d'erreur

Error starting at line 1 in command:
EXEC Rfile
ORA-29280: invalid directory path
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at "SYSTEM.RFILE", line 5
4
Dc Redwing

Pas sûr de ce qui cause des problèmes. Pour moi ça marche bien voici mon exemple de code


- Site de référence - https://community.Oracle.com/thread/3633577?start=0&tstart=0

     set serveroutput on;
     CREATE or replace DIRECTORY USER_DIR AS '/home/Oracle'; 
     GRANT READ ON DIRECTORY USER_DIR TO PUBLIC;

     DECLARE 
        V1 VARCHAR2(200); --32767
        F1 UTL_FILE.FILE_TYPE; 
     BEGIN 
        F1 := UTL_FILE.FOPEN('USER_DIR','temp.txt','R'); 
        Loop
        BEGIN
    UTL_FILE.GET_LINE(F1,V1); 
    dbms_output.put_line(V1);
    EXCEPTION WHEN No_Data_Found THEN EXIT; END;
        end loop;

        IF UTL_FILE.IS_OPEN(F1) THEN
     dbms_output.put_line('File is Open');
        end if;

        UTL_FILE.FCLOSE(F1); 
     END; 
     /
    set serveroutput off;

8
laks

Vous ne pouvez pas entrer le chemin directement dans la commande de fichier ouvert comme ceci

f := UTL_FILE.FOPEN('C:\Projects\','testdatabinary.txt','R');

Au lieu d'entrer directement le chemin, vous devez créer un répertoire à l'aide de la requête SQL ci-dessous

CREATE ou remplace DIRECTORY USER_DIR AS 'C:\PROJECTS \';

Entrez ensuite le nom du répertoire dans la commande de fichier ouvert. Ce sera comme ça

f := UTL_FILE.FOPEN('USER_DIR ','testdatabinary.txt','R');
7
Nizar

La première procédure essayant de charger le fichier du PC dans le serveur alors que dans la seconde procédure, le fichier est de serveur à serveur. UTL_FILE.FOPEN fonctionne pour PL/SQL côté serveur. Donc, la première procédure ne fonctionnera pas correctement ... Si vous voulez charger un fichier de PC à serveur, vous devez utiliser un serveur comme D @ K ou VB.

1
Mahesh

L'erreur que vous faites ici est d'utiliser le chemin du poste de travail, vous devez en fait utiliser le chemin du répertoire.

Le moyen le plus rapide de résoudre ce problème consiste simplement à utiliser la commandeWINSCP.

UtilisezWINSCPpour vous dire quel est le chemin du répertoire, puis substituez simplement cette nouvelle information à l’ancien chemin que vous avez dans votre code, et tout devrait fonctionner correctement.

0
Prince Sharma