Опять проблема с EXECUTE STATEMENT в ХП

Модераторы: kdv, CyberMax

Ответить
stepan96
Сообщения: 12
Зарегистрирован: 15 сен 2005, 11:52

Опять проблема с EXECUTE STATEMENT в ХП

Сообщение stepan96 » 16 май 2007, 08:42

Здравствуйте!

Опять возникла проблема при написании ХП с EXECUTE STATEMENT. Дело вот в чем: в интерефейсе необходимо на грид выводить только заданное количество записей (указывается в TEdit), при чем необходимо выдать пользователю сообщение об общем количестве страниц. Ну чтото типа вроде "Показана 5 страница из 63". Т.к. все таблицы, для которых это необходимо разработаны по единым принципам решил все запихнуть в ХП:

Код: Выделить всё

CREATE PROCEDURE COUNT_PAGES(
  TABLE_NAME VARCHAR(255) CHARACTER SET NONE,
  RECORDS_PER_PAGE BIGINT,
  WHERE_STR VARCHAR(1024) CHARACTER SET NONE)
RETURNS(
  RESULT BIGINT)
AS
DECLARE VARIABLE CC BIGINT;
DECLARE VARIABLE Q VARCHAR(1024) CHARACTER SET NONE;
BEGIN
  CC = 0;
  IF (TRIM(WHERE_STR) = '') THEN
    WHERE_STR = '1 = 1';
  Q = 'SELECT COUNT(ID) FROM ' || TABLE_NAME || ' WHERE ' || WHERE_STR;
  EXECUTE STATEMENT Q INTO :СС;
  
  RESULT = DIV(CC, RECORDS_PER_PAGE);
  IF (MOD(CC, RECORDS_PER_PAGE) <> 0) THEN
    RESULT = RESULT + 1;
END
При ее запуске возникает ошибка: Unsuccessfull execution caused by an unavailable resource. Variable type (position 0) in EXECUTE STATEMENT 'SELECT COUNT(ID) FROM GROUPS WHERE 1= 1' does not match returned column
В чем проблема - понять не могу. Помогите пожалуйста.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 16 май 2007, 10:34

Очень плохо, что "решил засунуть".
Эта процедура легко выполняется одним запросом, чего и советую.
Да ещё и вчитываться не хочешь, судя по всему. Тебе ясно в ошибке сказали - несоответствие типа параметра.
Плюс, мания величия. Два млрд. страниц тебе мало.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 16 май 2007, 18:00

поддерживаю. кстати, character set none тоже подозрителен.

Ответить