powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / DUMMY в Sybase 5.0
8 сообщений из 8, страница 1 из 1
DUMMY в Sybase 5.0
    #32440904
double_axe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в следующем.
В хранимую функцию передаю параметром строку сформировынную
в дельфях, типа round(0*250,0).
в select <cnhjrf> from dummy Вылетает ошибка,что не могу сконвертировать эту строку в число...

Тестил процедуру в централе, все ок если пишешь round(0*250,0),
а не 'round(0*250,0)'

Вопрос, как передавать в процедуру строку, чтобы все было ок!
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441014
Redbor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Передавай как и передаёшь, только в самой ХП выполняй EXECUTE IMMEDIATE
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441091
double_axe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что это даст ????
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441092
double_axe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот кусок процедуры

declare rez money;
select st into rez from DUMMY;
return(rez)

И куда execute IMMEDIATE вставлять????
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441205
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может так?

create function dba.calculator(in @param decimal(30,4))
result(@rez decimal(30,4))
begin
declare @rez decimal(30,4)
select st into @rez;
return(@rez)
end
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441441
mustlive
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, написал глупость. Вопрос не до конца прочитал
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441737
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример функции через EXECUTE IMMEDIATE:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE FUNCTION fn_Izvrate (
  @Func varchar( 250 )
)
RETURNS money
BEGIN
  DECLARE @Result money;
  EXECUTE IMMEDIATE WITH RESULT SET OFF 
    'SELECT ' || @Func || ' INTO @Result';

  RETURN @Result;
END


Теперь можно пользоваться:
Код: plaintext
SELECT fn_Izvrate ('Round(12.92, 0)');


Но лучше всего потом сделать так:
Код: plaintext
DROP FUNCTION fn_Izvrate;

и просто в Delphi сразу собирать необходимый SQL скрипт:
Код: plaintext
1.
2.
3.
4.
funcText := 'Round(12.92, 0)';
Query1.SQL.Text = 'SELECT ' + funcText + ' AS ResultField';
Query1.Open;
result := Query1.FieldByName('ResultField').AsCurrency;

Использовать для таких целей СУБД думаю не стоит, не зачем ее напрягать по таким ненужным мелочам :)
...
Рейтинг: 0 / 0
DUMMY в Sybase 5.0
    #32441896
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никому ничего не навязываю, но имхо параметры передавать удобней через Format:
Код: plaintext
1.
2.
3.
funcText := 'Round(12.92, 0)';
Query1.SQL.Text = Format('SELECT %s AS ResultField', [funcText]);
Query1.Open;
...

потому как когда параметров становится больше скажем 10, читать проблемно.
а если пареметр будет строка, то удобно сразу закомментить
QuotedStr(funcText), а в само sql-выражение не лазить.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / DUMMY в Sybase 5.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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