在ESQL应用程序中使用cursor update,为什么发生错误?
例如:
表模式如下:
dmSQL> def table card1;
create table SYSADM.CARD1 (
NUM SERIAL(1),
DD INTEGER not null,
EE CHAR(1) not null,
FIRSTNAME VARCHAR(30) not null,
LASTNAME VARCHAR(30) not null ,
TITLE VARCHAR(30) default null ,
BMP LONG VARBINARY default null )
in DEFTABLESPACE lock mode page fillfactor 100 ;
alter table SYSADM.CARD1 primary key ( NUM, DD, EE, FIRSTNAME);
编写ESQL/C代码:
EXEC SQL declare scroll_cursor scroll cursor for
select Num,dd,ee,LastName, FirstName from Card1
where NUM < 9 order by EE,NUM, DD,FIRSTNAME
into :Num, :LastName :indvalue, :FirstName :indvalue
for update of LastName;
上面的ESQL/C代码返回错误。
当使用Cursor update,有两个限制:
- ORDER BY子句中的字段必须是索引字段。
- 如果在OERDER BY子句中有多个字段,这些字段的顺序必须同于索引的定义顺序。
所以,上面例子中的ORDER BY子句应该改为:
Create an index with then same sequence with NUM, DD, EE, FIRSTNAME
Order by NUM, DD, EE, FIRSTNAME
以保证顺序与索引定义顺序一致。