Sql 导出DDL以放置在服务器上
我想写一个SQL过程,它使用DDL命令将文件从特定模式写入服务器上的directorium。我使用spool命令完成了这项工作,并将其保存在本地,但每次运行它时都需要它在服务器上。Sql 导出DDL以放置在服务器上,sql,oracle,plsql,spool,Sql,Oracle,Plsql,Spool,我想写一个SQL过程,它使用DDL命令将文件从特定模式写入服务器上的directorium。我使用spool命令完成了这项工作,并将其保存在本地,但每次运行它时都需要它在服务器上。 我正在使用Oracle RDBMS DBMS\u元数据可以是您的朋友。使用其过程GET_DDL()可以为您提供DDL脚本。您可以使用UTL_文件将其写入“Oracle DB目录”(这正是Oracle对象) 或者,您可以使用外部脚本连接到数据库,使用DBMS_元数据获取DDL 在这些情况下,您需要通过选择用户\对象(或
我正在使用Oracle RDBMS DBMS\u元数据可以是您的朋友。使用其过程GET_DDL()可以为您提供DDL脚本。您可以使用UTL_文件将其写入“Oracle DB目录”(这正是Oracle对象) 或者,您可以使用外部脚本连接到数据库,使用DBMS_元数据获取DDL 在这些情况下,您需要通过选择用户\对象(或所有/dba对象)等来编写脚本
或者您可以使用第三方工具,例如Oraschemadoc is。这将导出当前模式中所有对象的ddl
CREATE OR REPLACE PROCEDURE ddl_import
IS
file_ctl UTL_FILE.FILE_TYPE;
CURSOR object_cv IS
SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS;
code VARCHAR2(10000);
BEGIN
FOR cur in object_cv
LOOP
file_ctl:=UTL_FILE.FOPEN('ORADIR',cur.object_name||'.sql','W');
code:=DBMS_METADATA.GET_DDL(CUR.OBJECT_TYPE,CUR.OBJECT_NAME,'ORATUT');
UTL_FILE.PUTF(file_ctl,code);
UTL_FILE.FCLOSE(file_ctl);
END LOOP;
END ddl_import;
但在编译和执行此过程之前,请确保已在步骤中完成以下操作。
步骤1:在主机(OS)环境中创建目录,并向oracle用户授予读/写权限
第2步:执行创建或替换目录ORADIR为'D:/dir_name';dir_name是您在步骤1中创建的目录的名称
第3步:请您的DBA授予您对UTL\u文件的执行权限。或者,如果您有DBA的凭据,则执行以下命令-将UTL_文件上的execute授予user_名称;用户名当然是你 1)下面是如何为模式提取ddl的描述
我们必须改变
-- add
dest_clob clob;
-- change
DBMS_OUTPUT.PUT_LINE (DDL);
to
DBMS_LOB.APPEND (dest_clob, DDL);
最后
DBMS_XSLPROCESSOR.CLOB2FILE(dest_clob,dest_directory, my_schema.sql)
dest_目录具有读/写权限您是否尝试过使用
UTL_文件
?您可以创建一个shell脚本来执行您的过程,然后将新创建的文件移动到要放置它的服务器上您确定您没有使用content=metadata\u only
选项重新发明数据泵吗?