【问题标题】:An equivalence of ".schema sqlite_master" in OracleOracle 中“.schema sqlite_master”的等价物
【发布时间】:2021-02-03 10:07:28
【问题描述】:

我正在尝试对 SQLite 和 Oracle 进行相同的练习。在 SQLite 中,有一个表 sqlite_master 包含数据库中包含的所有其他表、索引、触发器和视图的描述。我可以看到使用.schema sqlite_master 生成sqlite_master 的查询。

在 Oracle 中,数据字典以多个视图的形式呈现给我们(DBAALLUSER)。我们以表USER_TABLES 为例。我们可以查询USER_TABLES,例如

SELECT table_name
FROM USER_TABLES;

无论如何获取用于在 Oracle 中创建表 USER_TABLES 的查询?我试过了

SELECT dbms_metadata.get_ddl('TABLE', 'USER_TABLES')
FROM dual;

但它不起作用。

【问题讨论】:

    标签: sql oracle sqlite data-dictionary


    【解决方案1】:

    我不确定你在寻找什么,但如果你想在 oracle 中定义任何表,你可以使用:

    Describe TableName
    

    或者,如果您想获得表、视图或列的列表,您可以使用以下查询: 对于表格:

    select * from select * from all_tables 
    

    对于列:

    select * from all_tab_columns
    

    观看次数:

    select * from select * from all_views 
    

    获取一个表的所有列信息: 选择 *

     from all_tab_columns
     where upper(table_name) = upper('Test')
     order by column_id
    

    通常 oracle 将 table_name 存储为大写,所以我使用了 upper() 或者您可以只输入 'TEST'

    【讨论】:

    • 在我看来SQL Developer不允许Describe
    • 您可以查询 all_tab_columns 以获取这些信息。
    【解决方案2】:

    你可以用这个:

    DECLARE
       DDL  CLOB;
    BEGIN
       FOR aTab IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP
          DDL := DBMS_METADATA.GET_DDL('TABLE', aTab.TABLE_NAME);
          DBMS_OUTPUT.PUT_LINE(DDL);
       END LOOP;
    END;
    

    您可以在运行查询之前使用DBMS_METADATA.SET_TRANSFORM_PARAM() 自定义输出。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2011-07-03
      • 2010-10-28
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多