Skip to content

Error "invalid BLOB ID" can occur when retrieving MON$STATEMENTS.MON$SQL_TEXT using ES/EDS and db_connect argument is not specified [CORE4747] #5052

Description

@firebird-automations

Submitted by: @pavel-zotov

Test-1 (works correct):

set list on;
set blob all;

recreate table test(sid int, txt blob);
commit;

set term ^;
execute block returns( msg varchar(10), running_stt_id int, running_stt_text blob) as
declare v_dbname varchar(255);
declare v_stt1 varchar(1024) = 'select t.sid, t.txt from test t';
declare v_stt2 varchar(1024) = 'select s.mon$statement_id, s.mon$sql_text from mon$statements s rows 1';
declare v_usr rdb$user = 'sysdba';
declare v_pwd varchar(20) = 'masterke';
declare v_trn int;
begin

\-\- NOTE: v\_dbname is NOT initialized with database connection string\.

in autonomous transaction do
insert into test\(sid, txt\) select s\.mon$statement\_id, s\.mon$sql\_text from mon$statements s rows 1;

msg = 'point\-1';
execute statement \(v\_stt1\)
on external \(v\_dbname\)
as user :v\_usr password :v\_pwd
into running\_stt\_id, running\_stt\_text;
suspend;

msg = 'point\-2';
execute statement \(v\_stt2\)
on external \(v\_dbname\)
as user :v\_usr password :v\_pwd
into running\_stt\_id, running\_stt\_text ;
suspend;

end
^
set term ;^
rollback;

Output:

MSG point-1
RUNNING_STT_ID 108
RUNNING_STT_TEXT b0:0
<execute block>

MSG point-2
RUNNING_STT_ID 227
RUNNING_STT_TEXT 0:1
<execute block>

Test-2:

set list on;
set blob all;

recreate table test(sid int, txt blob);
commit;
insert into test(sid, txt) select s.mon$statement_id, s.mon$sql_text from mon$statements s rows 1;
commit;

set term ^;
execute block returns( msg varchar(10), running_stt_id int, running_stt_text blob) as
declare v_dbname varchar(255);
declare v_stt1 varchar(1024) = 'select t.sid, t.txt from test t';
declare v_stt2 varchar(1024) = 'select s.mon$statement_id, s.mon$sql_text from mon$statements s rows 1';
declare v_usr rdb$user = 'sysdba';
declare v_pwd varchar(20) = 'masterke';
declare v_trn int;
begin
-- NOTE: v_dbname is NOT initialized with database connection string.

msg = 'point\-1';
execute statement \(v\_stt1\)
on external \(v\_dbname\)
as user :v\_usr password :v\_pwd
into running\_stt\_id, running\_stt\_text;
suspend;

msg = 'point\-2';
execute statement \(v\_stt2\)
on external \(v\_dbname\)
as user :v\_usr password :v\_pwd
into running\_stt\_id, running\_stt\_text ;
suspend;

end
^
set term ;^
rollback;

Output:

MSG point-1
RUNNING_STT_ID 105
RUNNING_STT_TEXT b1:0
insert into test(sid, txt) select s.mon$statement_id, s.mon$sql_text from mon$statements s rows 1

MSG point-2
RUNNING_STT_ID 227
RUNNING_STT_TEXT 0:1
Statement failed, SQLSTATE = 42000
invalid BLOB ID

No such error in the test-2 if change there MON$DATABASE.MON$SQL_TEXT to RDB$DATABASE.RDB$DESCRIPTION (and create some non-empty comment for database, of course).

---------
PS.
WI-V2.5.4.26856
WI-T3.0.0.31780

Commits: 4307b08 8edeb97 FirebirdSQL/fbt-repository@7a164ab FirebirdSQL/fbt-repository@07cdffe

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions