Jam*_*mes 55 oracle privileges ddl plsql
我对Oracle数据库中的几个表具有"只读"访问权限.我需要获取一些列的架构信息.我想使用类似于MS SQL的东西sp_help.
我在这个查询中看到了我感兴趣的表:
SELECT * FROM ALL_TABLES
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,Oracle告诉我"在架构中找不到表",是的,参数是正确的.
SELECT
DBMS_METADATA.GET_DDL('TABLE', 'ITEM_COMMIT_AGG', 'INTAMPS') AS DDL
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
在使用我的Oracle通用翻译器9000后,我推测这不起作用,因为我没有足够的权限.鉴于我的约束,我如何获得表上的列的数据类型和数据长度?我有PL-SQL语句的读访问权限?
Ada*_*sch 53
ALL_TAB_COLUMNS应该可以从PL/SQL查询. DESC是一个SQL*Plus命令.
SQL> desc all_tab_columns;
Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME NOT NULL VARCHAR2(30)
DATA_TYPE VARCHAR2(106)
DATA_TYPE_MOD VARCHAR2(3)
DATA_TYPE_OWNER VARCHAR2(30)
DATA_LENGTH NOT NULL NUMBER
DATA_PRECISION NUMBER
DATA_SCALE NUMBER
NULLABLE VARCHAR2(1)
COLUMN_ID NUMBER
DEFAULT_LENGTH NUMBER
DATA_DEFAULT LONG
NUM_DISTINCT NUMBER
LOW_VALUE RAW(32)
HIGH_VALUE RAW(32)
DENSITY NUMBER
NUM_NULLS NUMBER
NUM_BUCKETS NUMBER
LAST_ANALYZED DATE
SAMPLE_SIZE NUMBER
CHARACTER_SET_NAME VARCHAR2(44)
CHAR_COL_DECL_LENGTH NUMBER
GLOBAL_STATS VARCHAR2(3)
USER_STATS VARCHAR2(3)
AVG_COL_LEN NUMBER
CHAR_LENGTH NUMBER
CHAR_USED VARCHAR2(1)
V80_FMT_IMAGE VARCHAR2(3)
DATA_UPGRADED VARCHAR2(3)
HISTOGRAM VARCHAR2(15)
Run Code Online (Sandbox Code Playgroud)
akf*_*akf 36
您可以使用该desc命令.
desc MY_TABLE
Run Code Online (Sandbox Code Playgroud)
这将为您提供列名,null是否有效以及数据类型(和长度,如果适用)
小智 17
注意:如果您尝试获取不同SCHEMA中的表的此信息,请使用all_tab_columns视图,我们遇到此问题,因为我们的应用程序出于安全目的使用不同的SCHEMA.
使用以下内容:
例如:
SELECT
data_length
FROM
all_tab_columns
WHERE
upper(table_name) = 'MY_TABLE_NAME' AND upper(column_name) = 'MY_COL_NAME'
Run Code Online (Sandbox Code Playgroud)
sev*_*ryn 17
我发现这种情况的最佳解决方案是
select column_name, data_type||
case
when data_precision is not null and nvl(data_scale,0)>0 then '('||data_precision||','||data_scale||')'
when data_precision is not null and nvl(data_scale,0)=0 then '('||data_precision||')'
when data_precision is null and data_scale is not null then '(*,'||data_scale||')'
when char_length>0 then '('||char_length|| case char_used
when 'B' then ' Byte'
when 'C' then ' Char'
else null
end||')'
end||decode(nullable, 'N', ' NOT NULL')
from user_tab_columns
where table_name = 'TABLE_NAME'
and column_name = 'COLUMN_NAME';
Run Code Online (Sandbox Code Playgroud)
@Aaron Stainback,谢谢你的纠正!
小智 12
select t.data_type
from user_tab_columns t
where t.TABLE_NAME = 'xxx'
and t.COLUMN_NAME='aaa'
Run Code Online (Sandbox Code Playgroud)
Oracle:获取表中完整数据类型的列表:
select data_type || '(' || data_length || ')'
from user_tab_columns where TABLE_NAME = 'YourTableName'
Run Code Online (Sandbox Code Playgroud)
select column_name, data_type || '(' || data_length || ')' as datatype
from all_tab_columns
where TABLE_NAME = upper('myTableName')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
207265 次 |
| 最近记录: |