powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Параметр в выборке
18 сообщений из 18, страница 1 из 1
Параметр в выборке
    #32301124
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите сформировать запрос вида

SELECT :PARAM1
FROM T

При попытке выполнить такой запрос выдается ошибка:
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Data type unknown.

Только не надо отвечать мне "А зачем тебе такой запрос", в исходном варианте он выглядит немного иначе
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301138
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Только не надо отвечать мне "А зачем тебе такой запрос",
А он сам напрашивается !!!

Это аналогично вот этому :

Код: plaintext
1.
SELECT  1 , 2 , 3 , 4 , 5  FROM T 
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301140
Sclif81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выдается ошибка потому что ты хочешь в качестве параметра передать имя таблицы, что не разрешается. Параметр не передает метаданные, как то название таблиц, полей и т.п.
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301148
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а если конкретно, то можно, но только в версии FB 1.5
Там есть execute statement, смотри доку.
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301158
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sample:

CREATE PROCEDURE DynamicSampleThree (TextField VARCHAR( 100 ), TableName VARCHAR( 100 ))
	RETURNING_VALUES (Line VARCHAR( 32000 ))
AS
DECLARE VARIABLE OneLine VARCHAR( 100 );

BEGIN
Line = '';
FOR EXECUTE STATEMENT 'SELECT ' || TextField || ' FROM ' || TableName
	INTO :OneLine
DO
  IF (OneLine IS NOT NULL) THEN
    Line = Line || OneLine || ' ';
SUSPEND;
END
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301162
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sclif81
автор писал:Выдается ошибка потому что ты хочешь в качестве параметра передать имя таблицы, что не разрешается. Параметр не передает метаданные, как то название таблиц, полей и т.п.

А вот и можно !!!
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301192
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясняю ситуацию конкретнее.
Данная выборка уже прекрасно реализована с помощью хранимой процедуры. Но надо отказаться от хранимых процедур (требования к программе).

Есть задача:
1. Вначале расчитывается полная сумма.
2. Рассчитываются суммы 3-и барьеров
a) сумма покупки < 100грн
b) 100<сумма покупки<200
c) сумма покупки > 200грн
3. Расчитать отношения сумм барьеров к общей сумме

Я хотел в первом запросе высчитать суммы, а в другом отношения сумм барьеров!!!!
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301208
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще запрос должен выглядеть так:

SELECT '<'||:Barrier1,Z(SUM(Actual)),COUNT(Id),Round(100*Z(SUM(Total))/:SumAll,2),Round(100*COUNT(Id)/:CountAll,2)
FROM Opers
WHERE (Total < :Barrier1)
AND (RDB$Modified <> 1)
AND (DateOnly BETWEEN :DateMin AND :DateMax)
AND ((:DEPARTID = 0) OR ((:DEPARTID <> 0) AND (departid = :DEPARTID)))
UNION
SELECT CAST('>='||:Barrier1||' - <'||:Barrier2 AS VARCHAR(60)),Z(SUM(Actual)),COUNT(Id),Round(100*Z(SUM(Total))/:SumAll,2),Round(100*COUNT(Id)/:CountAll,2)
FROM Opers
WHERE ((Total >= :Barrier1) AND (Total < :Barrier2))
AND (RDB$Modified <> 1)
AND (DateOnly BETWEEN :DateMin AND :DateMax)
AND ((:DEPARTID = 0) OR ((:DEPARTID <> 0) AND (departid = :DEPARTID)))
UNION
SELECT CAST('>='||:Barrier2||' - <'||:Barrier3 AS VARCHAR(60)),Z(SUM(Actual)),COUNT(Id),Round(100*Z(SUM(Total))/:SumAll,2),Round(100*COUNT(Id)/:CountAll,2)
FROM Opers
WHERE ((Total >= :Barrier2) AND (Total < :Barrier3))
AND (RDB$Modified <> 1)
AND (DateOnly BETWEEN :DateMin AND :DateMax)
AND ((:DEPARTID = 0) OR ((:DEPARTID <> 0) AND (departid = :DEPARTID)))
UNION
SELECT CAST('>='||:Barrier3||' - <'||:Barrier4 AS VARCHAR(60)),Z(SUM(Actual)),COUNT(Id),Round(100*Z(SUM(Total))/:SumAll,2),Round(100*COUNT(Id)/:CountAll,2)
FROM Opers
WHERE ((Total >= :Barrier3) AND (Total < :Barrier4))
AND (RDB$Modified <> 1)
AND (DateOnly BETWEEN :DateMin AND :DateMax)
AND ((:DEPARTID = 0) OR ((:DEPARTID <> 0) AND (departid = :DEPARTID)))
UNION
SELECT CAST('>='||:Barrier4||' - <'||:Barrier5 AS VARCHAR(60)),Z(SUM(Actual)),COUNT(Id),Round(100*Z(SUM(Total))/:SumAll,2),Round(100*COUNT(Id)/:CountAll,2)
FROM Opers
WHERE ((Total >= :Barrier4) AND (Total < :Barrier5))
AND (RDB$Modified <> 1)
AND (DateOnly BETWEEN :DateMin AND :DateMax)
AND ((:DEPARTID = 0) OR ((:DEPARTID <> 0) AND (departid = :DEPARTID)))
UNION
SELECT CAST('>= '||:Barrier5 AS VARCHAR(60)),Z(SUM(Actual)),COUNT(Id),Round(100*Z(SUM(Total))/:SumAll,2),Round(100*COUNT(Id)/:CountAll,2)
FROM Opers
WHERE (Total >= :Barrier5)
AND (RDB$Modified <> 1)
AND (DateOnly BETWEEN :DateMin AND :DateMax)
AND ((:DEPARTID = 0) OR ((:DEPARTID <> 0) AND (departid = :DEPARTID)))
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301214
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь что без ХП не получится.
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301238
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая особенность парсера. В FB1.5 Д. Еманов советовал использовать COALESCE, т.е. SELECT COALESCE(:PARAM1 ,'') FROM T
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301253
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А пробовал использовать ф-ю Z(x) из модуля rfunc.dll
Но в результате получил полный бред
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301258
Sclif81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dnico
Я не юзал FB, только IB, в 6-ке точно не было такого. Это только особенность FB1.5?
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301266
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sclif81
Да, это новшества FB 1.5 ...
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301307
Sclif81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
10x за инфу.
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301675
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT COALESCE(:PARAM1 ,'') FROM T
на FB1.5 не работает !!!

Dynamic SQL Error.
SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301693
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты чего в этот параметр засунул? Ты ж во второй части COALESCE напиши соотв. значение типу, который передал.
...
Рейтинг: 0 / 0
Параметр в выборке
    #32301764
vovan1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, прогнал:)
Поставил во второй параметр 0 и получил то что нужно, правда осталась еще одна проблемка - использование FB1.5 нежелательно:(
Может эту ф-ю смогут заменить некоторые другие?
...
Рейтинг: 0 / 0
Параметр в выборке
    #32303174
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юзайте FIBPlus - компоненты, там есть такие безобразия, как МАКРОСЫ.
Там можно писать
Select @what from @where
или даже
@What_doing @with_what

Правда, парсинг на стороне клиента...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Параметр в выборке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]