如何通过SQL Developer工具(SQLPLUS命令行界面)获取Oracle的表,存储过程的模式脚本?
答案 0 :(得分:56)
答案 1 :(得分:24)
如果要查看对象的DDL,可以使用
select dbms_metadata.get_ddl('OBJECT_TYPE','OBJECT_NAME','OBJECT_OWNER')
from dual
/
例如,这将为您提供emp
表的DDL脚本。
select dbms_metadata.get_ddl('TABLE','EMP','HR')
from dual
/
您可能需要将long
类型格式设置为大号。对于包,您需要访问dba_source, user_source, all_source
表。您可以查询对象名称和类型以查看存储的代码。
答案 2 :(得分:9)
这对我有用:
注意,您还可以同时突出显示多个对象,因此您可以生成一个包含数据库中所有表的create语句的脚本。
答案 3 :(得分:4)
在Oracle中,包含有关所有数据库对象(包括表和存储过程)的信息的位置称为数据字典。它是一组视图,使您可以访问定义数据库的元数据。您可以在数据字典视图中查询所需数据库对象的列表,然后使用dbms_metadata
包中的可用函数来获取每个对象的DDL。另一种方法是调查dbms_metadata
中的支持,以便为对象集合导出DDL。
对于一些指针,例如,为了获得表的列表,您可以使用以下数据字典视图
user_tables
包含用户拥有的所有表格all_tables
包含用户可以访问的所有表格答案 4 :(得分:3)
使用dbms_metadata包,如here
所述答案 5 :(得分:2)
这对我有用:
PL SQL Developer - >工具 - >导出用户对象
选择复选框:包括权限和包含存储
选择您的文件名。命中导出。
您稍后可以使用生成的导出文件在另一个模式中创建表。
答案 6 :(得分:2)
第1步。 select * from <tablename>;
第2步。只需右键单击您的输出(t.e数据)然后转到最后一个选项导出它将给你一些扩展然后单击您所需的扩展然后应用你将获得包括数据的新文件。
答案 7 :(得分:1)
基本答案似乎是“使用dbms_metadata包”。轴心问题是:
但是如果我想一次为所有表格生成一个脚本呢?
答案可能是询问系统目录中所有表的名称和所有者:
SELECT dbms_metadata.get_ddl('TABLE', s.tabname, s.tabowner)
FROM system_catalog_describing_tables AS s
WHERE ...any conditions that are needed...
我不熟悉Oracle以了解系统目录。在Informix中,我知道,假设有一个过程dbms_metadata.get_ddl
,查询将是:
SELECT dbms_metadata.get_ddl('TABLE', s.tabname, s.owner)
FROM "informix".systables AS s
WHERE tabid >= 100 AND tabtype = 'T';
在Informix中,小于100的制表符是为系统目录保留的,并且通过要求正确的“tabtype”排除非表格(视图,同义词,序列和一些其他深奥的东西)。
答案 8 :(得分:1)
我不知道DBMS_METADATA,但您的回答促使我创建utility to script all objects owned by an Oracle user。
答案 9 :(得分:1)
Oracle SQL Developer&gt;查看&gt; DBA&gt;选择你的连接&gt;展开&gt;安全&gt;用户&gt;右键单击您的用户&gt;创建类似&gt;填写字段&gt;复制SQL脚本&gt;关闭
如果您的用户具有对象权限,请执行此操作
Oracle SQL Developer&gt;查看&gt; DBA&gt;选择你的连接&gt;展开&gt;安全&gt;用户&gt;双击您的用户&gt;对象权限&gt;选择所有数据&gt;右键单击&gt;出口&gt;导出为文本文件
编辑该文本文件以向用户授予对象权限。