我已获得对 Oracle 数据库的访问权限,我正在尝试确定表中的给定列是否可以为空。我可以连接到 Oracle DB 并获取连接元数据。
问问题
227 次
1 回答
1
普通 SQL 解决方案(适用于各种数据库访问层)
要获取特定列:
SELECT NULLABLE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = '<YOUR_TABLE_NAME>'
AND COLUMN_NAME = '<YOUR_COLUMN_NAME>';
要获取表中的所有列:
SELECT COLUMN_NAME, NULLABLE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = '<YOUR_TABLE_NAME>' ;
如果表在另一个模式中,你应该这样使用它:
SELECT COLUMN_NAME, NULLABLE
FROM ALL_TAB_COLUMNS
WHERE OWNER = '<OWNER_SCHEMA_NAME>'
AND TABLE_NAME = '<YOUR_TABLE_NAME>';
(基于OTN 论坛上的帖子)
JDBC具体解决方案:
您可以使用DatabaseMetadata对象:
- 通过调用获取表数据
getColumns(null,null,'yourtablename','%',null)
- 然后从结果集中,得到你需要的 'COLUMN_NAME' 列和 'NULLABLE'
(来自Herong Yang 博士:列出所有列 - getColumns())
或者您可以使用虚拟查询:Java2S: Is column nullable from ResultSetMetadata 我不喜欢这个,这不是一个干净的解决方案......
于 2012-10-11T13:09:53.477 回答