ij> -- -- Licensed to the Apache Software Foundation (ASF) under one or more -- contributor license agreements. See the NOTICE file distributed with -- this work for additional information regarding copyright ownership. -- The ASF licenses this file to You under the Apache License, Version 2.0 -- (the "License"); you may not use this file except in compliance with -- the License. You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. -- autocommit off; ij> create table t1 (c1 int primary key, c2 int); 0 rows inserted/updated/deleted ij> insert into t1 values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10); 10 rows inserted/updated/deleted ij> get scroll insensitive cursor sc1 as 'SELECT * FROM t1 FOR UPDATE'; ij> next sc1; C1 |C2 ----------------------- 1 |1 ij> next sc1; C1 |C2 ----------------------- 2 |2 ij> -- update row nr. 2 after positioning with next update t1 set c2 = c1 + 20 where current of sc1; 1 row inserted/updated/deleted ij> absolute 5 sc1; C1 |C2 ----------------------- 5 |5 ij> -- update row nr. 5 after positioning with absolute update t1 set c2 = c1 + 20 where current of sc1; 1 row inserted/updated/deleted ij> relative 2 sc1; C1 |C2 ----------------------- 7 |7 ij> -- update row nr. 7 after positioning with relative update t1 set c2 = c1 + 20 where current of sc1; 1 row inserted/updated/deleted ij> previous sc1; C1 |C2 ----------------------- 6 |6 ij> -- update row nr. 6 after positioning with previous update t1 set c2 = c1 + 20 where current of sc1; 1 row inserted/updated/deleted ij> relative -1 sc1; C1 |C2 ----------------------- 5 |25 ij> last sc1; C1 |C2 ----------------------- 10 |10 ij> -- update row nr. 10 after positioning with last update t1 set c2 = c1 + 20 where current of sc1; 1 row inserted/updated/deleted ij> after last sc1; No current row ij> -- update when positioned after last should cause an error update t1 set c2 = c1 + 20 where current of sc1; ERROR 24000: Invalid cursor state - no current row. ij> first sc1; C1 |C2 ----------------------- 1 |1 ij> -- update row nr. 1 after positioning with first update t1 set c2 = c1 + 20 where current of sc1; 1 row inserted/updated/deleted ij> before first sc1; No current row ij> -- update when positioned before first should cause an error update t1 set c2 = c1 + 20 where current of sc1; ERROR 24000: Invalid cursor state - no current row. ij> close sc1; ij> commit; ij> -- check that row where correctly updated select * from t1; C1 |C2 ----------------------- 1 |21 2 |22 3 |3 4 |4 5 |25 6 |26 7 |27 8 |8 9 |9 10 |30 ij> get scroll insensitive cursor sc1 as 'SELECT * FROM t1 FOR UPDATE'; ij> next sc1; C1 |C2 ----------------------- 1 |21 ij> next sc1; C1 |C2 ----------------------- 2 |22 ij> -- delete row nr. 2 after positioning with next delete from t1 where current of sc1; 1 row inserted/updated/deleted ij> absolute 5 sc1; C1 |C2 ----------------------- 5 |25 ij> -- delete row nr. 5 after positioning with absolute delete from t1 where current of sc1; 1 row inserted/updated/deleted ij> relative 2 sc1; C1 |C2 ----------------------- 7 |27 ij> -- delete row nr. 7 after positioning with relative delete from t1 where current of sc1; 1 row inserted/updated/deleted ij> previous sc1; C1 |C2 ----------------------- 6 |26 ij> -- delete row nr. 6 after positioning with previous delete from t1 where current of sc1; 1 row inserted/updated/deleted ij> relative -1 sc1; C1 |C2 ----------------------- NULL |NULL ij> last sc1; C1 |C2 ----------------------- 10 |30 ij> -- delete row nr. 10 after positioning with last delete from t1 where current of sc1; 1 row inserted/updated/deleted ij> after last sc1; No current row ij> -- delete when positioned after last should cause an error delete from t1 where current of sc1; ERROR 24000: Invalid cursor state - no current row. ij> first sc1; C1 |C2 ----------------------- 1 |21 ij> -- delete row nr. 1 after positioning with first delete from t1 where current of sc1; 1 row inserted/updated/deleted ij> before first sc1; No current row ij> -- delete when positioned before first should cause an error delete from t1 where current of sc1; ERROR 24000: Invalid cursor state - no current row. ij> close sc1; ij> commit; ij> -- check that row where correctly updated select * from t1; C1 |C2 ----------------------- 3 |3 4 |4 8 |8 9 |9 ij>