firebird
firebird copied to clipboard
<Missing arg #1 - possibly status vector overflow>. [CORE6113]
Submitted by: Jan Kohlmeyer (colaflasche)
I have 2 exceptions in a empty DB: CREATE EXCEPTION EX_1 '@1'; CREATE EXCEPTION EX_2 '@1@2';
If I do this, I get the exception and the message '<Missing arg #1 - possibly status vector overflow>' execute block as begin exception EX_2 using ('a', 'b'); end
if i do one of this I don'd get the extension '<Missing arg #1 - possibly status vector overflow>' in the message:
execute block as begin exception EX_1 using ('a'); end
execute block as begin exception EX_2 using ('a'); end
Very crazy: execute block as begin exception EX_2 using ('a', 'b', 'c'); -- One Agr more, but exception has only 2 args end
Modified by: Jan Kohlmeyer (colaflasche)
description: I have 2 exceptions in a empty DB: CREATE EXCEPTION EX_1 '@1'; CREATE EXCEPTION EX_2 '@1@2';
If I do this, I get the exception and the message '<Missing arg #1 - possibly status vector overflow>' execute block as begin exception EX_2 using ('a', 'b'); end
if i do one of this I don'd get the extension '<Missing arg #1 - possibly status vector overflow>' in the message: execute block as begin exception EX_1 using ('a'); end
execute block as begin exception EX_2 using ('a'); end
=>
I have 3 exceptions in a empty DB: CREATE EXCEPTION EX_1 '@1'; CREATE EXCEPTION EX_2 '@1@2';
If I do this, I get the exception and the message '<Missing arg #1 - possibly status vector overflow>' execute block as begin exception EX_2 using ('a', 'b'); end
if i do one of this I don'd get the extension '<Missing arg #1 - possibly status vector overflow>' in the message:
execute block as begin exception EX_1 using ('a'); end
execute block as begin exception EX_2 using ('a'); end
Very crazy: execute block as begin exception EX_2 using ('a', 'b', 'c'); -- One Agr more, but exception has only 2 args end
Modified by: Jan Kohlmeyer (colaflasche)
description: I have 3 exceptions in a empty DB: CREATE EXCEPTION EX_1 '@1'; CREATE EXCEPTION EX_2 '@1@2';
If I do this, I get the exception and the message '<Missing arg #1 - possibly status vector overflow>' execute block as begin exception EX_2 using ('a', 'b'); end
if i do one of this I don'd get the extension '<Missing arg #1 - possibly status vector overflow>' in the message:
execute block as begin exception EX_1 using ('a'); end
execute block as begin exception EX_2 using ('a'); end
Very crazy: execute block as begin exception EX_2 using ('a', 'b', 'c'); -- One Agr more, but exception has only 2 args end
=>
I have 2 exceptions in a empty DB: CREATE EXCEPTION EX_1 '@1'; CREATE EXCEPTION EX_2 '@1@2';
If I do this, I get the exception and the message '<Missing arg #1 - possibly status vector overflow>' execute block as begin exception EX_2 using ('a', 'b'); end
if i do one of this I don'd get the extension '<Missing arg #1 - possibly status vector overflow>' in the message:
execute block as begin exception EX_1 using ('a'); end
execute block as begin exception EX_2 using ('a'); end
Very crazy: execute block as begin exception EX_2 using ('a', 'b', 'c'); -- One Agr more, but exception has only 2 args end
Commented by: @AlexPeshkoff
Can not reproduce:
$ ./isql -z employee -user sysdba ISQL Version: LI-V3.0.5.33154-dev Firebird 3.0 Server version: LI-V3.0.5.33154-dev Firebird 3.0 Database: employee, User: SYSDBA SQL> CREATE EXCEPTION EX_1 '@1'; SQL> CREATE EXCEPTION EX_2 '@1@2'; SQL> set term ^; SQL> execute block CON> as CON> begin CON> exception EX_2 using ('a', 'b'); CON> end^ Statement failed, SQLSTATE = HY000 exception 7 -EX_2 -ab -At block line: 4, col: 3 SQL>
That's current 3.0.5 but I believe there were no related changes.
Commented by: Jan Kohlmeyer (colaflasche)
Okay, with isql I also can't reproduce it. I've only by using IB-Expert or IBDAC DataAccess-Components with my Delphi.
Commented by: @AlexPeshkoff
That confirms that this is due to restriction of ISC API. Status vector length is limited by 20 elements (each error message and each argument to it means 2 elements). ISQL is using new API which can work with arbitrary length status vector. Ideal solution is use of new OO API in IB-Expert / IBDAC but I understand that it's not too fast deal.
We can think about something like API call setting higher status vector length but status vector is created by caller (in your case IB-Expert & IBDAC) and therefore you will anyway need new version of routines to make them work with long status vectors.
Run into it with Flamerobin. Strange thing is that adding third parameter into using, when exception accepts only 2 then there is no "Missing arg #1 - possibly status vector overflow"
Extra parameter is not missing parameter thus no error. IMHO this is a correct behavior.
It is just strange, that adding extra parameter silences message... Although I only now noticed, that it was included already in original submission.... That
exception EX_2 using ('a', 'b');
creates that message, but
exception EX_2 using ('a');
and
exception EX_2 using ('a', 'b', 'c');
do not. I guess passing extra parameter is a way to silence it.
Interesting... This Missing arg #1 - possibly status vector overflow is specific to raising exception with 2 parameters. if Exception is defined accepting 3 parameters, then calling it with 2 parameters in uses also results in that message. But not with 1 or 3 or 4. And same is true if exception is defined with no parameters... Passing 2 parameters in uses gives same error... 1, 3, 4 are all fine. Really really strange...