如果不使用descripe命令,如何在Oracle中描述表?
我正在上一门课,这让我很为难。我们需要编写一个Oracle脚本,其作用与descripe命令类似。我们正在使用的这本书非常糟糕地描述了如何使用数据字典。不是寻找答案,而是找到正确的方向。Oracle有一套包含数据库结构元数据的表。有一张桌子。视图表。列的表格。您可以使用视图来查询这些表,例如用户_表(模式中的表)、所有_表(您有权查看的表)、DBA_表(所有表,如果您有权限)。更一般地说,许多数据库供应商支持“信息模式”,它提供了跨供应商的元数据的一致视图。在此处搜索“ALL_TABLES”,并查看您要查找的所有其他可用信息-所有列及其在执行查询的架构中的描述-或-除用户有权查看的所有表之外的相同信息 典型的查询可能是:如果不使用descripe命令,如何在Oracle中描述表?,oracle,oracle11g,sql-scripts,data-dictionary,Oracle,Oracle11g,Sql Scripts,Data Dictionary,我正在上一门课,这让我很为难。我们需要编写一个Oracle脚本,其作用与descripe命令类似。我们正在使用的这本书非常糟糕地描述了如何使用数据字典。不是寻找答案,而是找到正确的方向。Oracle有一套包含数据库结构元数据的表。有一张桌子。视图表。列的表格。您可以使用视图来查询这些表,例如用户_表(模式中的表)、所有_表(您有权查看的表)、DBA_表(所有表,如果您有权限)。更一般地说,许多数据库供应商支持“信息模式”,它提供了跨供应商的元数据的一致视图。在此处搜索“ALL_TABLES”,并
select *
from user_tab_columns
where table_name = 'MY_TABLE'
order by column_id
column\u id
是表中列的“顺序”
您应该确保“MY_TABLE”是大写的,除非您添加了带大小写的表(一个坏主意),在这种情况下,您需要使用类似于=“MyTable”
的内容
具体来说,desc
相当于我从一个好的Oracle资源中偷来的以下内容:
select column_name as "Name"
, nullable as "Null?"
, concat(concat(concat(data_type,'('),data_length),')') as "Type"
from user_tab_columns
where table_name = 'MY_TABLE';
您可以通过select*from dictionary
找到所有此类视图,这是的顶层,或者通过查看
还有
DBA_TAB_列
,它与所有_TAB_列
相同,但适用于数据库中的每个表。这假定您有查看它和表的权限。如果您无权访问此表,则需要让DBA授予您选择任何词典
权限 您还可以检索可用于重新创建表的整个命令:
select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual;
选择dbms_元数据。从dual获取_ddl('TABLE','','');
中新引入的是信息
命令或简称为信息表\u name
。
它有一个简单的语法,如DESC[RIBE]
:
SQL> info
INFORMATION
--------
This command is like describe but with more details about the objects requested.
INFO[RMATION] {[schema.]object[@connect_identifier]}
INFO+ will show column statistics
与descripe
相比,它的输出更具描述性。它列出了有关表、视图或同义词的列定义,或函数或过程规范的更详细信息
例如:这是我运行时在SQLcl:release18.1.1中得到的输出
员工信息
SQL> info employees;
TABLE: EMPLOYEES
LAST ANALYZED:2018-05-26 15:07:58.0
ROWS :107
SAMPLE SIZE :107
INMEMORY :DISABLED
COMMENTS :employees table. Contains 107 rows. References with departments,
jobs, job_history tables. Contains a self reference.
Columns
NAME DATA TYPE NULL DEFAULT COMMENTS
*EMPLOYEE_ID NUMBER(6,0) No Primary key of employees table.
FIRST_NAME VARCHAR2(20 BYTE) Yes First name of the employee. A not null column.
LAST_NAME VARCHAR2(25 BYTE) No Last name of the employee. A not null column.
EMAIL VARCHAR2(25 BYTE) No Email id of the employee
PHONE_NUMBER VARCHAR2(20 BYTE) Yes Phone number of the employee; includes country
code and area code
HIRE_DATE DATE No Date when the employee started on this job. A not
null column.
JOB_ID VARCHAR2(10 BYTE) No Current job of the employee; foreign key to job_id
column of the jobs table. A not null column.
SALARY NUMBER(8,2) Yes Monthly salary of the employee. Must be greater
than zero (enforced by constraint emp_salary_min)
COMMISSION_PCT NUMBER(2,2) Yes Commission percentage of the employee; Only
employees in sales department elgible for
commission percentage
MANAGER_ID NUMBER(6,0) Yes Manager id of the employee; has same domain as
manager_id in departments table. Foreign key to
employee_id column of employees table.(useful for
reflexive joins and CONNECT BY query)
DEPARTMENT_ID NUMBER(4,0) Yes Department id where employee works; foreign key to
department_id column of the departments table
Indexes
INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS
HR.EMP_JOB_IX NONUNIQUE VALID JOB_ID
HR.EMP_NAME_IX NONUNIQUE VALID LAST_NAME, FIRST_NAME
HR.EMP_EMAIL_UK UNIQUE VALID EMAIL
HR.EMP_EMP_ID_PK UNIQUE VALID EMPLOYEE_ID
HR.EMP_MANAGER_IX NONUNIQUE VALID MANAGER_ID
HR.EMP_DEPARTMENT_IX NONUNIQUE VALID DEPARTMENT_ID
References
TABLE_NAME CONSTRAINT_NAME DELETE_RULE STATUS DEFERRABLE VALIDATED GENERATED
DEPARTMENTS DEPT_MGR_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
EMPLOYEES EMP_MANAGER_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
JOB_HISTORY JHIST_EMP_FK NO ACTION ENABLED NOT DEFERRABLE VALIDATED USER NAME
这是一个带有info+
的屏幕截图:
谢谢!这绝对是我所看到的最好的解释。这个答案很好,因为它还为表提供了索引和键。视觉上更吸引人的是这一细微的修改:
select regexp_replace(dbms_metadata.get_ddl('table',''),'\t|\s{2}',CHR(13))作为dual中的ddl