描述在IBM DB2中不起作用

时间:2017-04-05 14:42:32

标签: sql db2 ibm-midrange db2-400

我在IBM DB2中运行查询;

DESCRIBE TABLE Schema.Table

但我收到错误

DESCRIBE TABLE Schema.Table错误42601:令牌表无效。有效代币::。 SQLCODE = -104

我经常搜索,但无法找到原因,因为我是IBM DB2的新手,所以无法弄清楚这件事。这是与许可相关的问题吗?

我没有快速访问命令。

2 个答案:

答案 0 :(得分:4)

您似乎在IBM i(以前称为AS / 400)上使用DB2,其中catalog views are in the QSYS2 schema

在最近的版本中,还有它们的等价物:SYSIBM.SQLCOLUMNSINFORMATION_SCHEMA.COLUMNS

答案 1 :(得分:3)

如果您只是尝试获取表或视图的目录信息,系统目录将正常工作,如mustaccio的另一个答案中所述。但是如果你想在你的RPG或COBOL程序中嵌入一个DESCRIBE TABLE,那也可以。您可能希望这样做的一个原因是,如果您有动态列数,或者您在编译时不知道表名。您可以使用通过描述表或游标构建的sql描述符来接收程序中FETCH语句的输出。您需要SQL DescriptorSQLDA才能收到表格的说明。它看起来像这样:

dcl-s tableName     Varchar(128);

exec sql allocate sql descriptor 'D1' with max 20;

tableName = 'MYTABLE';
exec sql
  describe table :tableName
    using sql descriptor 'D1';

这将检索有关表的信息到指定的描述符中。在这种情况下D1。描述符名称可以是主机变量。此示例为20个项目分配local描述符。如果表的列数超过20列,则可以在ALLOCATE DESCRIPTOR语句中请求更大的描述符。如果您要在多个模块中传播使用给定描述符的sql,则需要使用'D1'替换global 'D1'来使用全局描述符。您也可以使用SQLDA,但我发现这些可能更难以使用。

要从描述符中获取信息,请使用GET DESCRIPTOR。了解从描述符中获取的所有内容的详细信息超出了本网站的范围,但作为示例,您可以获得MYTABLE的第一列的列名,如下所示:

dcl-s columnName     Varchar(128) Inz('');

exec sql
  get sql descriptor 'D1'
    value 1 :columnName = name;

当你完成它时,不要忘记取消分配描述符。

exec sql deallocate sql descriptor 'D1';

您可以在DESCRIBE TABLE https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/db2/rbafzdescrtb.htm找到有关ALLOCATE DESCRIPTOR的更多信息。知识中心还包含有关DEALLOCATE DESCRIPTORGET DESCRIPTOR* * * * * echo `who am i` 1> /home/2125/RR_Dev_Code/ETL/crontab.test.out 2>/home/2125/RR_Dev_Code/ETL/crontab.test.err 的信息。