Skip to content

INTO clause allows to assign more than once to the same variable [CORE1835] #2264

Open
@firebird-automations

Description

@firebird-automations

Submitted by: Claudio Valderrama C. (robocop)

The following statements are allowed:

set term ^;
execute block returns(a char(30), b int)as begin execute statement
'select rdb$character_set_name, 1, 2 from rdb$database' into :a, :b, :b;
end^

Second example:

create procedure pr0 returns(n int) as begin select 1, 2 from
rdb$database into :n, :n; suspend; end^
select * from pr0^

       N

============
2

SQL> ^Z

I consider it dangerous to allow the same var to be reused in the INTO
clause. The last assignment survives, but this is an implementation detail. From parse.y, INTO is used in:
- FOR SELECT ... INTO and <singleton> SELECT ... INTO inside procedures
- EXECUTE STATEMENT ... INTO
- FOR EXECUTE STATEMENT... INTO
- FETCH ... INTO inside procedures
- MERGE and UPDATE OR INSERT
- RETURNING clause

C.