1

我有一个在 SQLRPGLE 程序结束时创建然后删除的表

     //Delete the temporary table
     shell('DLTF FILE(QTEMP/STVRECONWK)':IGNORE_ERROR);

     // create temporary table
     exec sql
       create table qtemp/stvreconwk (
         sysid integer,
         barcode varchar(100),
         description varchar(100),
         matchflag char(1)
       )
     ;

每当我尝试从 WebSphere 编译时,我都会得到

SQL1103:未找到 QTEMP 中表 STVRECONWK 的位置 24 列定义。

问题是该表不存在,如果我从终端会话创建表然后编译(也从终端)它可以工作,因为编译器能够验证表,因为它们在同一个作业中运行。

我如何在 WebSphere 中做到这一点?

4

2 回答 2

1

在 QTEMP 中创建但也被编译器作为“外部描述”文件访问的文件应该创建为“模型”文件的副本。任何需要引用外部文件描述的程序都应该被编译为引用应该始终存在的“模型”文件。“模型”为编译器提供了所有必要的属性。覆盖提供了在运行时对程序副本的访问。“模型”只是在编译时驻留在库列表中的库中的文件描述。

对于最新版本的编译器,不需要覆盖。对于 RPG,F-spec 可以包含 EXTDESC() 或 EXTFILE() 关键字来标注“模型”文件或运行时文件。

在大多数情况下,“模型”将被复制到使用不同名称的 QTEMP 文件以避免冲突。

于 2014-04-04T13:21:31.343 回答
0

默认情况下,WebSphere 将在新作业中运行每个命令。您可以在 window->preferences->iseries->command execution 中更改它并取消选中“批量编译”

于 2011-03-23T21:34:44.103 回答