在 DBC 数据库中找不到变量 'varName'
Variable 'varName' is not found on DBC database
我有一个 DBC 容器,里面有很多 DBF table。
table的格式不一样,像这样:
tables with b8_
on the name does not contain the column 'NUMEROSBIS3'
and tables with the tsn_
on the name 有列 'NUMEROSBIS3'
如果我想从容器中删除 table 我执行下一条语句:
EXECSCRIPT([REMOVE TABLE tsn20150426])
使用此语句,table 已从 DBC 容器中删除,但如果我执行如下 select
语句:
SELECT * FROM tsn20150426
然后我得到错误 Variable 'NUMEROS3BIS' is not found
。但是,如果我执行 EXECSCRIPT([REMOVE TABLE b8_20130811])
(不包含 'NUMEROS3BIS
列的 table(删除 table)然后我执行 SELECT * FROM b8_20130811
我得到数据没有错误!
这两个动作有什么区别?为什么带有列 'NUMEROS3BIS'
的 table(table 上的 tsn_
前缀)在 select
语句和另一个 table 上出现错误( b8_
table) 上的前缀不会引发错误?
我不得不说,在每次操作中,物理文件都不会被删除或移动或做任何事情。
我不能完全确认,但可能发生的情况是 REMOVE table 只是从实际的数据库容器中删除 table,但将原始的 table 保留为 FREE- TABLE 仍在目录中。
一旦table是"Free"table并且没有绑定到数据字典,它不再支持超过10个字符的列名(原始设计最大列名长度) .因此,您的 "NUMEROSBIS3" 列是 11 个字符,因此在免费 table.
中被截断为仅 "NUMEROSBIS"
查询第二个 table 时,因为它没有 11 个字符的列名,所以没有错误。巧合的是,没有其他列的名称超过 10 个字符。
根据评论进行编辑。
如果您仍然需要 11 个字符的列名,内存游标结果集的列名仍然可以超过 10 个字符。所以你必须调整你的查询,比如
select ;
T1.*, ;
T1.NUMEROSBIS as NUMEROSBIS3 ;
from ;
tsn20150426 T1 ;
into ;
cursor C_SomeResultAlias readwrite
然后您将仍然有 10 个字符的版本和 11 个字符的版本以符合您的其余应用程序逻辑。
我有一个 DBC 容器,里面有很多 DBF table。
table的格式不一样,像这样:
tables with b8_
on the name does not contain the column 'NUMEROSBIS3'
and tables with the tsn_
on the name 有列 'NUMEROSBIS3'
如果我想从容器中删除 table 我执行下一条语句:
EXECSCRIPT([REMOVE TABLE tsn20150426])
使用此语句,table 已从 DBC 容器中删除,但如果我执行如下 select
语句:
SELECT * FROM tsn20150426
然后我得到错误 Variable 'NUMEROS3BIS' is not found
。但是,如果我执行 EXECSCRIPT([REMOVE TABLE b8_20130811])
(不包含 'NUMEROS3BIS
列的 table(删除 table)然后我执行 SELECT * FROM b8_20130811
我得到数据没有错误!
这两个动作有什么区别?为什么带有列 'NUMEROS3BIS'
的 table(table 上的 tsn_
前缀)在 select
语句和另一个 table 上出现错误( b8_
table) 上的前缀不会引发错误?
我不得不说,在每次操作中,物理文件都不会被删除或移动或做任何事情。
我不能完全确认,但可能发生的情况是 REMOVE table 只是从实际的数据库容器中删除 table,但将原始的 table 保留为 FREE- TABLE 仍在目录中。
一旦table是"Free"table并且没有绑定到数据字典,它不再支持超过10个字符的列名(原始设计最大列名长度) .因此,您的 "NUMEROSBIS3" 列是 11 个字符,因此在免费 table.
中被截断为仅 "NUMEROSBIS"查询第二个 table 时,因为它没有 11 个字符的列名,所以没有错误。巧合的是,没有其他列的名称超过 10 个字符。
根据评论进行编辑。
如果您仍然需要 11 个字符的列名,内存游标结果集的列名仍然可以超过 10 个字符。所以你必须调整你的查询,比如
select ;
T1.*, ;
T1.NUMEROSBIS as NUMEROSBIS3 ;
from ;
tsn20150426 T1 ;
into ;
cursor C_SomeResultAlias readwrite
然后您将仍然有 10 个字符的版本和 11 个字符的版本以符合您的其余应用程序逻辑。