Dimitry Sibiryakov писал(а):А как насчет перестать темнить и показать таки нам внутренности процедуры?.. А еще лучше - полный test case в формате isql.
Код: Выделить всё
SET TERM ^ ;
CREATE PROCEDURE SEARCH_SELECT_OR (
table_name varchar(32),
attribute_name varchar(32),
query_id integer,
flag smallint)
returns (
result_count integer)
as
declare variable table_name_id integer;
declare variable attribute_name_id integer;
BEGIN
TABLE_NAME = UPPER(TABLE_NAME);
ATTRIBUTE_NAME = UPPER(ATTRIBUTE_NAME);
SELECT NAME_ID FROM SEARCH_NAMES WHERE NAME = :TABLE_NAME INTO :TABLE_NAME_ID;
SELECT NAME_ID FROM SEARCH_NAMES WHERE NAME = :ATTRIBUTE_NAME INTO :ATTRIBUTE_NAME_ID;
INSERT INTO SEARCH_QUERY_RESULTS (QUERY_ID, TABLE_FK, ATTRIBUTE_FK, WEIGHT, WORD_COUNT)
SELECT :QUERY_ID, ST.TABLE_ID, SA.ATTRIBUTE_ID, PS.WEIGHT, PS.WORD_COUNT
FROM SEARCH_PREPARE_SELECT_OR(:QUERY_ID, :FLAG) PS
JOIN SEARCH_ATTRIBUTES SA ON SA.ATTRIBUTE_ID = PS.ATTRIBUTE_ID
JOIN SEARCH_TABLES ST ON ST.TABLE_ID = SA.TABLE_FK AND ST.FLAG = 0;
SELECT COUNT(*) FROM SEARCH_QUERY_RESULTS WHERE QUERY_ID = :QUERY_ID INTO :RESULT_COUNT;
SUSPEND;
END^
SET TERM ; ^
Попробовал собрать test case, думал так:
Код: Выделить всё
CREATE TABLE TESTS (
TESTID INTEGER NOT NULL
);
ALTER TABLE TESTS ADD CONSTRAINT PK_TESTS PRIMARY KEY (TESTID);
SET TERM ^ ;
ALTER PROCEDURE INSERT_ID (
ID INTEGER)
RETURNS (
RESULT_COUNT INTEGER)
AS
BEGIN
INSERT INTO TESTS (TESTID) VALUES (1);
SELECT COUNT(*) FROM TESTS INTO :RESULT_COUNT;
SUSPEND;
END
^
SET TERM ; ^
Но результат совсем другой.
Хотя нет, при выполнении
Код: Выделить всё
SELECT RESULT_COUNT FROM INSERT_ID(1)
UNION ALL
SELECT RESULT_COUNT FROM INSERT_ID(1)
Возвращает результат 1, null
У меня FB2.0, смотрел IBExpert