Dzyann Asked: 2015-01-08 06:55:34 +0800 CST2015-01-08 06:55:34 +0800 CST 2015-01-08 06:55:34 +0800 CST 如何使用 PL/SQL 创建脚本文件? 772 在许多情况下,我必须更新几个对象。为了实现这一点,我使用 DBMS_METADATA 创建 DDL 语句。 到目前为止,我有 DDL 语句并将它们保存在表中。我想为每个对象将所述 DDL 语句保存在 .sql 文件中。 我知道我可以用 C# 做到这一点,但到目前为止,我已经能够实现我需要用 PL/SQL 做的所有事情。有没有办法用 PL/SQL 创建 .sql 文件? oracle plsql 1 个回答 Voted Best Answer druzin 2015-01-08T07:07:53+08:002015-01-08T07:07:53+08:00 这相对容易。使用 Oracle 中的 UTL_FILE 包,您可以在服务器文件系统中创建一个文件,并将任何 PL/SQL 语句的输出写入其中。您实际上也可以使用它从文件中读取数据。 http://psoug.org/reference/utl_file.html 您可能还想了解一下 Directory 对象类型,因为这是使用 UTL_FILE 包的先决条件;http://psoug.org/reference/directories.html -- 下面是一个将 ascii 数据写入现有 Oracle 目录对象的过程示例。运行代码的用户需要对 Oracle Directory 对象具有读/写访问权限。 CREATE PROCEDURE put_local_ascii_data (p_data IN CLOB, p_dir IN VARCHAR2, p_file IN VARCHAR2) IS -- -------------------------------------------------------------------------- l_out_file UTL_FILE.file_type; l_buffer VARCHAR2(32767); l_amount BINARY_INTEGER := 32767; l_pos INTEGER := 1; l_clob_len INTEGER; BEGIN l_clob_len := DBMS_LOB.getlength(p_data); l_out_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32767); WHILE l_pos <= l_clob_len LOOP DBMS_LOB.read (p_data, l_amount, l_pos, l_buffer); IF g_convert_crlf THEN l_buffer := REPLACE(l_buffer, CHR(13), NULL); END IF; UTL_FILE.put(l_out_file, l_buffer); UTL_FILE.fflush(l_out_file); l_pos := l_pos + l_amount; END LOOP; UTL_FILE.fclose(l_out_file); EXCEPTION WHEN OTHERS THEN IF UTL_FILE.is_open(l_out_file) THEN UTL_FILE.fclose(l_out_file); END IF; RAISE; END; p_data参数是一个 CLOB,它将(在这种情况下)包含所有写入 p_dir 目录的 ascii 数据和p_file名称(在运行时创建)。您可能需要对数据进行一些 clob 转换,具体取决于您用于填充 clob 对象的查询结果中的数据类型。
这相对容易。使用 Oracle 中的 UTL_FILE 包,您可以在服务器文件系统中创建一个文件,并将任何 PL/SQL 语句的输出写入其中。您实际上也可以使用它从文件中读取数据。 http://psoug.org/reference/utl_file.html
您可能还想了解一下 Directory 对象类型,因为这是使用 UTL_FILE 包的先决条件;http://psoug.org/reference/directories.html
-- 下面是一个将 ascii 数据写入现有 Oracle 目录对象的过程示例。运行代码的用户需要对 Oracle Directory 对象具有读/写访问权限。
p_data参数是一个 CLOB,它将(在这种情况下)包含所有写入 p_dir 目录的 ascii 数据和p_file名称(在运行时创建)。您可能需要对数据进行一些 clob 转换,具体取决于您用于填充 clob 对象的查询结果中的数据类型。