描述在 IBM DB2 中不起作用



我在 IBM DB2 中运行查询作为;

DESCRIBE TABLE Schema.Table

但是我收到一个错误,因为

描述表 架构。表错误 42601:令牌表无效。有效令牌::。SQLCODE=-104

我搜索了很多,但找不到原因,因为我是IBM DB2的新手,所以无法弄清楚这个问题。是与权限相关的问题吗?

我没有命令提示符访问权限。

您似乎正在使用 IBM i 上的 DB2(以前称为 AS/400),其中目录视图位于 QSYS2 模式中。

在最近的版本中,也有它们的等效版本:SYSIBM。SQLCOLUMNS 和 INFORMATION_SCHEMA。列。

如果您只是尝试获取表或视图的目录信息,则系统目录将正常工作,如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 DESCRIPTORDEALLOCATE DESCRIPTORGET DESCRIPTOR的信息。

相关内容

  • 没有找到相关文章

最新更新