【发布时间】:2020-04-14 18:11:10
【问题描述】:
我是 Oracle db 的新手,我想知道我是否可以找出数据类型和数据大小... 我的意思是:假设我在表“产品”中有类型为 varchar2(20) 的列“位置”。 我可以写一个查询结果“varchar2”和“20”吗?
谢谢!
【问题讨论】:
我是 Oracle db 的新手,我想知道我是否可以找出数据类型和数据大小... 我的意思是:假设我在表“产品”中有类型为 varchar2(20) 的列“位置”。 我可以写一个查询结果“varchar2”和“20”吗?
谢谢!
【问题讨论】:
select data_type, data_length
from user_tab_columns
where table_name = 'PRODUCTS'
and column_name = 'LOCATION';
【讨论】:
您是否需要找出列的类型和大小以了解数据,或者您正在编写一个需要在运行时知道它的程序?
如果您只需要了解它,在 SQLPlus 中输入desc tablename 将告诉您有关表中的列。
如果您需要以编程方式找出类型和大小,您使用的是什么语言...PL/SQL?爪哇?
请注意,从 USER_TAB_COLUMNS 中选择只会列出您自己架构中的表中的列。对于其他表,您需要查看 ALL_TAB_COLUMNS(或 DBA_TAB_COLUMNS,如果 DBA 允许您访问它)。请注意,您的雇主或客户可能不允许针对其中任何一个编译存储过程或包。
【讨论】:
SELECT CHAR_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = <TABLENAME> AND COLUMN_NAME = <COLUMNNAME>;
【讨论】:
这个问题的答案对我很有用。但是,当列类型为NVARCAHR2 时,在取data_length 时需要考虑一个重要的区别。为 NVARCHA2 列返回的 data_length 加倍。
这是由于使用了字符编码。 Oracle documentation 说:
对于 AL16UTF16,字节数最多可以是两倍大小 UTF8 编码的编码和三倍大小。
因此,理想的查询如下:
select table_name, column_name,
data_type, NVL(char_col_decl_length, data_length)
from user_tab_columns where table_name='T51_NOCOMP';
【讨论】:
我从 sqlplus 为 oracle 执行以下操作:
SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
AND COLUMN_NAME = 'YOUR';`
希望它也对你有用!
【讨论】: