【发布时间】:2009-07-21 01:16:17
【问题描述】:
好的,我有一个与我之前遇到的问题有关的问题。我知道如何修复它,但我们在尝试重现该错误时遇到了问题。
我们有一系列基于其他记录创建记录的程序。这些记录通过link_id 链接到主记录。在获取此link_id 的过程中,查询是
select @p_link_id = id --of the parent
from table
where thingy_id = (blah)
现在,活动表中有多行。有些可以取消。我的代码没有在 select 语句中取消包含取消的行,因此如果以前有取消的行,这些 id 将出现在 select 中。如果我不包括取消的行,总会有一个“打开”记录被选中。 (附加where status != 'C')
这解决了这个问题。但是,我需要能够在我们的开发环境中重现该问题。
我经历了一个过程,我输入了一大堆数据、打开、取消等,试图让这个 select 语句返回一个无效的 id。但是,每当我运行 select 时,id 都是按顺序排列的(生成的序列),但是在发生此错误的情况下,select 语句将似乎是第一个值返回到变量中。
例如。
ID Status
1 Cancelled
2 Cancelled
3 Cancelled
4 Open
鉴于上述情况,如果我选择我想要的 ID,我想得到“4”。在错误中,结果为 1。但是,即使我输入了 10 条取消的记录,我仍然得到了选择中的最后一条。
在 oracle 中,我知道如果您选择一个变量并返回多条记录,则会出现错误(我认为)。 Sybase 显然可以将多个值赋给一个变量而不会出错。
我认为这与如何从表中选择数据有关,其中没有排序顺序的 id 不会按升序返回,或者有一个 dboption,其中选择一个变量将保存查询的第一个或最后一个值。
编辑:看起来我们可以通过回滚存储过程更改来重现此错误。但是,proc 不会靠近此 link_id 列。对数据库架构的更改是否可能会破坏索引或其他什么?
【问题讨论】:
-
这是sybase-asa、sybase-ase、sybase-iq 还是sqlanywhere?正在尝试清理 [sybase] 标记...