2014-07-07 78 views
0

我想运行查询:“DESCRIBE table_name;”从Java运行Oracle查询

statement = this.connection.createStatement(); 
ResultSet rset = statement.executeQuery("DESCRIBE table_name"); 

,我得到这个错误:

" java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement" 

是什么问题?

+1

'describe'不是一个有效的SQL语句,它是一个'SQL * Plus'命令。有效的SQL语句(可以通过JDBC运行)在手册中列出:http://docs.oracle.com/cd/E11882_01/server.112/e41084/toc.htm –

回答

1

DESCSQL*Plus命令。所以你不能通过JDBC/ODBC来使用它。 替代方案可以如下所示。

select RPAD(COLUMN_NAME,30)||' '||DATA_TYPE||'('||DATA_LENGTH||')' as descr 
FROM all_tab_cols 
    WHERE TABLE_NAME = UPPER('YOUR_TABLE') and owner=UPPER('SCHEMA_NAME'); 

all_tab_cols数据字典表(视图),其中包含表元数据

Oracle's Reference

1
describe user2.flights; 

这里user2是数据库名称,航班是表名。尝试这个。

或者使用一个查询

select * 
    from user_tab_columns 
where table_name = 'MY_TABLE' 
order by column_id; 

使用此查询。

column_id是表格中列的“顺序”。

你应该保证,除非你已经加入与外壳在这种情况下,你需要使用类似= “MyTable的”

+0

我在哪里可以找到数据库名称? 我使用Oracle SQL Developer工作。 – user2188596

+0

使用另一个。这可能对你有所帮助。 – SkyWalker

+0

在Oracle'user2'中是模式,它与拥有对象的用户相同 - 可能是你自己,在这种情况下你可以忽略它;如果你正在查看'user_ *'表,你只能看到你自己的对象。它不是数据库名称。 (如果该对象是用带引号的标识符创建的,则不应该使用双引号:'='MyTable'')。 –

2

DESC[RIBE]是表(一个坏主意)是“MY_TABLE”是大写一个SQL * Plus命令,而不是一个SQL语句。该DESC命令查询Oracle数据字典,是这样的:

select COLUMN_NAME, DATA_TYPE 
    from USER_TAB_COLUMNS 
where TABLE_NAME = 'YOUR_TABLE'