Was I wrong to expect this to work?

9 views
Skip to first unread message

Roy Hann

unread,
Aug 4, 2022, 11:24:50 AMAug 4
to
* create sequence genno as integer;
* create procedure next_vno result row (integer)
* as declare vno integer not null;
* begin
* select genno.nextval * 10 + generate_digit('LUHN_A',genno.currval) into :vno;
* return row (:vno);
* end
* \g
Executing . . .

continue
* select * from next_vno() \g
Executing . . .

E_LQ003A Cannot start up 'select' query.
Unexpected initial protocol response.

Roy

G Jones

unread,
Aug 5, 2022, 3:20:33 AMAug 5
to
I get E_SC0206, but splitting the query up slightly persuades it to produce a result:

create procedure next_vno result row (integer) as
declare v1 integer not null;
v2 integer not null;
v3 integer not null;
begin
select genno.nextval, genno.currval into :v1,:v2;
select :v1 * 10 + generate_digit('LUHN_A',:v2) into :v3;
return row(:v3);
end;

(Using 11.1 +p15773).

Roy Hann

unread,
Aug 5, 2022, 4:11:13 AMAug 5
to
Thanks Geraint.

I did roughly the same thing so currval wasn't needed at all. But your
way confirms currval is not the source of the problem.

Incidentally I had previously tried using a view, on the basis that
any query can be a view. It turns out querying a sequence in a view is
explicitly disallowed.

I cannot think what the justification would be. It's an annoying
exceptional case. But hey-ho; it's SQL. :-P

Roy

Reply all
Reply to author
Forward
0 new messages