Oracle 如何在类型声明中使用utl_文件

Oracle 如何在类型声明中使用utl_文件,oracle,plsql,Oracle,Plsql,我正在创建一个类型,我想在其中使用utl_文件包。不幸的是,我有一个信息: MEMBER FUNCTION draw(fichier utl_file.file_type) RETURN NUMBER, PLS-00201:identifier utl_file.file_type must be declared 有些人可能会说,我需要将execute on utl_文件包授予用户,但这不是这里的解决方案,因为用户已经拥有特权,因为我可以在包中使用utl_文件 谢谢您的回答您确定它是PLS

我正在创建一个类型,我想在其中使用utl_文件包。不幸的是,我有一个信息:

MEMBER FUNCTION draw(fichier utl_file.file_type) RETURN NUMBER,

PLS-00201:identifier utl_file.file_type must be declared
有些人可能会说,我需要将execute on utl_文件包授予用户,但这不是这里的解决方案,因为用户已经拥有特权,因为我可以在包中使用utl_文件


谢谢您的回答

您确定它是PLSQL吗?这不是创建函数的sintax。试试这个:

CREATE OR REPLACE FUNCTION draw (fichier utl_file.file_type) RETURN NUMBER
IS
    A NUMBER;
    --declare your variables
BEGIN
    A:=1;
    --code your process
RETURN A; --your return value
END;
/
查看PL/SQL对象类型的示例。在“方法”下,它指出,“数据类型(参数的)可以是任何Oracle类型,属性不允许的除外”。因此不允许的其他内容包括PL/SQL包中定义的类型,如UTL_FILE.FILE_TYPE

共享和享受。

--声明实用程序文件类型

V_FILE_ID_OUT := UTL_FILE.FILE_TYPE;
--在实用程序中存储文件打开选项

V_FILE_ID_OUT :=
         UTL_FILE.FOPEN ('/path/',
                         filename,
                         'W'
                        );
--把你的信息写进文件里

UTL_FILE.PUT_LINE (V_FILE_ID_OUT, 'message');
--关闭实用程序选项

UTL_FILE.FCLOSE (V_FILE_ID_OUT);

我可以确认这种情况存在,并且似乎是由于无法将任何记录类型传递给对象类型的成员过程。这可能是某个地方记录的,但我还没有找到它。在“对象类型的组件”下,有一些状态表明类型属性不能是记录类型(以及其他类型)。我猜这也适用于成员进程的参数。分享和享受。我有答案。。。非常感谢。包中没有定义类型,utl_文件就是这种情况。。。所以这是不可能的。。too badOP正在创建对象类型,并试图声明一个成员过程,该过程接受UTL_FILE.FILE_类型记录作为参数。