Hello, All!
/**
 * Firebird 2.1
 * Ubuntu Linux 8.04.2
 * Kernel and CPU: Linux 2.6.24-23-server on x86_64
 *
 * ðÒÏÝÅ ÎÅ ÐÏÌÕÞÉÌÏÓØ ×ÏÓÐÒÏÉÚ×ÅÓÔÉ ÂÁÇ, ÎÕÖÎÁ ÔÁÂÌÉÃÁ É ÐÒÏÃÅÄÕÒÁ
 */
CREATE TABLE TEST_BUG (
    N    BIGINT,
    VAL  DOUBLE PRECISION
);
INSERT INTO TEST_BUG (N, VAL) VALUES (1, 5);
COMMIT WORK;

SET TERM ^ ;

create or alter procedure TEST_BUG_PROC (
    N bigint)
returns (
    VAL double precision)
as
begin
    select first 1 val
        from test_bug
        where n = :n
        order by val asc
    into :val;

    suspend;
end^

SET TERM ; ^

GRANT SELECT ON TEST_BUG TO PROCEDURE TEST_BUG_PROC;

/*
  ÓÏÂÓÔ×ÅÎÎÏ ÚÁÐÒÏÓ
  ÐÒÉ ÐÏ×ÔÏÒÎÏÍ ÚÁÐÕÓËÅ (×ÉÄÉÍÏ, ÏÛÉÂËÁ × ËÅÛÉÒÏ×ÁÎÉÉ)
  ÎÁ ÆÅÔÞÅ ×ÙÚÙ×ÁÅÔ ÏÛÉÂËÕ
  'arithmetic exception, numeric overflow, or string truncation.'
*/
select RAW.* from(
  select
    maxvalue(
      (select val from test_bug_proc(A)),
      (select val from test_bug_proc(B))
    ) as C
  from(
    select cast(1 as BIGINT) as A, cast(1 as BIGINT) as B from rdb$database
    union all
    select NULL as A, cast(1 as BIGINT) as B from rdb$database
  ) as BASE
) as RAW

With best regards, Oleg Prosvetov. 



Ответить