【问题标题】:Execute a "DESC TABLE" command in Oracle using JavaScript?使用 JavaScript 在 Oracle 中执行“DESC TABLE”命令?
【发布时间】:2014-06-24 17:51:06
【问题描述】:

我需要使用 JavaScript 查找多个 Oracle 视图的列信息。我试过的是:

var conObj = new ActiveXObject('ADODB.Connection');     
conObj.Open(conString);     
sql = "DESC MyView";
rs1 = new ActiveXObject("ADODB.Recordset");

var commd = new ActiveXObject('ADODB.Command');

commd.ActiveConnection = conObj; //

commd.CommandText = sql;

commd.CommandType = 1;

rs1 = commd.Execute();

我得到的是关于 sql 语句的错误。我知道 sql 在 SQL Developer 中工作。

我不能使用备用 SELECT 查询,因为它返回一个空行集 - 当我需要运行查询时,视图不会被填充。只有 DESC 返回值。

有什么想法吗?

【问题讨论】:

  • 这段代码应该在哪里运行?数据库服务器在哪里?
  • DESC 是一个SQL*Plus 命令。所以,你不能使用它。

标签: javascript sql oracle


【解决方案1】:

DESC 是一个SQL*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');

Oracle's Reference

all_tab_cols 是一个数据字典表(视图),其中包含表/视图元数据。

示例:

SQL> create view MyView as select * from dual where 1=2;

View created.

SQL> select RPAD(COLUMN_NAME,30)||' '||DATA_TYPE||'('||DATA_LENGTH||')' as descr
  2  FROM all_tab_cols
  3   WHERE TABLE_NAME ='MYVIEW'  and owner='MYSCHEMA';


DESCR
------------------------------------------------
DUMMY                          VARCHAR2(1)

数据和DESC

SQL> select * from myview;

no rows selected

SQL> desc myview;

 Name       Null?    Type
 -----------------------------
 DUMMY               VARCHAR2(1)

【讨论】:

  • 我刚刚尝试将其插入,但它不喜欢 FROM 位置。我试过: sql = "select * from user_tab_cols where table_name = 'mytable'" 但结果是空的。
  • 我选择的别名实际上是保留关键字,因此它是。请立即尝试。此外,表名必须全部为 CAPS
  • 您可以用双引号将别名“desc”。此外,data_length 的类型为 NUMBER(Oracle 将其隐式转换为 varchar)。
  • 解决了 FROM 的问题,但它返回一个空行集。我认为问题在于视图中没有任何行。直到稍后才会填充它。 DESC 命令确实有效——我假设它在 Oracle 中使用了更深层次的东西。当我运行 DESC 命令时,我得到一个描述表格的文本字符串,但我不知道如何提取它。
  • @Patrick 双引号会起作用,但我个人不使用只是因为在获取时我必须使用相同的情况。 (如果我不选择列索引)。我猜类型转换不会在这里产生影响。但用户仍然可以包含单个列。
【解决方案2】:

我同意 Maheswaran 的询问。此外,我尝试了以下查询以获取所有信息。这让我了解不同的约束和属性。

选择 * FROM all_tab_cols WHERE TABLE_NAME = UPPER('TABLE_NAME') 和 owner=UPPER('SCHEMA_NAME');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多