我有一个DBC容器,里面有很多DBF表。
表格的格式不同,如下所示:
名称中包含requests
的表格不包含列b8_
,名称中包含'NUMEROSBIS3'
的表格列为tsn_
如果我想从容器中删除表,我执行下一个语句:
'NUMEROSBIS3'
使用此语句,表将从DBC容器中删除,但如果我执行这样的EXECSCRIPT([REMOVE TABLE tsn20150426])
语句:
select
然后我收到错误SELECT * FROM tsn20150426
。但是,如果我执行Variable 'NUMEROS3BIS' is not found
(一个不包含EXECSCRIPT([REMOVE TABLE b8_20130811])
列的表格(删除表格)然后我执行'NUMEROS3BIS
我得到的数据没有错误!
这两项行动的区别是什么?为什么表SELECT * FROM b8_20130811
(表'NUMEROS3BIS'
前缀)的表在tsn_
语句和表上的另一个表(select
前缀)上得到错误&# 39; t抛出错误?
我必须说,在每个动作中,物理文件永远不会被移除或移动或任何东西。
答案 0 :(得分:2)
我无法完全确认,但可能发生的事情是REMOVE表只是从实际的数据库容器中删除了表,但是将原始表保留为目录中的FREE-TABLE。
一旦桌子成为" Free"表并且不绑定到数据字典,它不再支持长度超过10个字符的列名(原始设计最大列名长度)。那么你的专栏" NUMEROSBIS3"是11个字符,因此被截断为只有#34; NUMEROSBIS"在免费表格中。
查询第二个表时,由于它没有11个字符的列名,因此没有错误。巧合的是,没有其他列的名称长度超过10个字符。
每条评论都有编辑。
如果仍然需要11个字符的列名,则内存中的游标结果集仍然可以具有超过10个字符的列名。所以你必须调整你的查询类似
select ;
T1.*, ;
T1.NUMEROSBIS as NUMEROSBIS3 ;
from ;
tsn20150426 T1 ;
into ;
cursor C_SomeResultAlias readwrite
然后,您仍然拥有10个字符的版本和11个字符的版本,以符合其他应用程序逻辑。