我已经用创建了一个文件夹,如命令“CreateorRepse文件夹.”MY_DIR是我文件夹的名称。我的错误在第21行:"l_fichier_log := utl_file.fopen( w_repertoire,w_fichier,‘w’);
create or replace PROCEDURE JSP
AS
CURSOR C_donnees IS
select distinct CODPRO, MOTCLE,CODZN6,CODZN8
From PRO WHERE CODZN6 = 'C' AND CODSOC = '1';
w_sysdate varchar2(20);
w_repertoire varchar2(64);
w_fichier varchar2(80);
l_fichier_log utl_file.file_type;
BEGIN
SELECT To_Char(SysDate, 'YYYYMMDD_HH24MISS') DATEJOUR INTO w_sysdate FROM Dual;
w_repertoire := 'MY_DIR';
w_fichier := 'extraction_'||w_sysdate||'.csv';
dbms_output.put_line('D‚but de la boucle');
l_fichier_log := utl_file.fopen( w_repertoire, w_fichier, 'w');
FOR r_donnees IN c_donnees
LOOP
utl_file.put_line(l_fichier_log, r_donnees.CODPRO || ';' || r_donnees.MOTCLE || ';' || r_donnees.CODZN6 || ';' || r_donnees.CODZN8 );
END LOOP;
UTL_FILE.fclose_all;
dbms_output.put_line('FIN du script');
END;错误是:
ORA-29283: opération non valide sur le fichier
ORA-06512: à "SYS.UTL_FILE", ligne 536
ORA-29283: opération non valide sur le fichier
ORA-06512: à "SYS.UTL_FILE", ligne 41
ORA-06512: à "SYS.UTL_FILE", ligne 478
ORA-06512: à "C##JLECAT.JSP", ligne 21
ORA-06512: à ligne 2你能帮帮我吗?
谢谢!
发布于 2021-03-19 09:14:52
除了创建一个目录(不是“文件夹”;它是目录,一个Oracle对象)之外,您还应该将特权授予将要使用它的用户。
因此,连接为SYS (就像创建目录时一样),运行。
grant read, write on directory my_dir to julien;(或任何用户名)。
我测试了您的代码;它在我的数据库上正常工作,并授予我的SCOTT用户特权。我用了光标中的双表,因为我没有你的。
SQL> CREATE OR REPLACE PROCEDURE jsp
2 AS
3 CURSOR c_donnees IS SELECT dummy FROM DUAL;
4
5 w_sysdate VARCHAR2 (20);
6 w_repertoire VARCHAR2 (64);
7 w_fichier VARCHAR2 (80);
8 l_fichier_log UTL_FILE.file_type;
9 BEGIN
10 SELECT TO_CHAR (SYSDATE, 'YYYYMMDD_HH24MISS') datejour
11 INTO w_sysdate
12 FROM DUAL;
13
14 w_repertoire := 'MY_DIR';
15 w_fichier := 'extraction_' || w_sysdate || '.csv';
16 DBMS_OUTPUT.put_line ('D but de la boucle');
17 l_fichier_log := UTL_FILE.fopen (w_repertoire, w_fichier, 'w');
18
19 FOR r_donnees IN c_donnees
20 LOOP
21 UTL_FILE.put_line (l_fichier_log, r_donnees.dummy);
22 END LOOP;
23
24 UTL_FILE.fclose_all;
25 DBMS_OUTPUT.put_line ('FIN du script');
26 END;
27 /
Procedure created.测试:
SQL> EXEC jsp;
D but de la boucle
FIN du script
PL/SQL procedure successfully completed.
SQL>因此,你一定做错了什么。
https://stackoverflow.com/questions/66705314
复制相似问题