crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Создание процедуры в firebird
berserk
  опции профиля:
сообщение 22.5.2014, 23:32
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.2.2009
Пользователь №: 540

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет!

Кто нибудь знает возможно ли создание хранимой процедуры в firebird программно?
С консоли приходится заменять символ конца строки. "SET TERM".
Весь гугл перерыл, не могу найти как программно создать процедуру(((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.5.2014, 11:10
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


а что, простым выполнением запроса с командой создания она не создаётся? вроде почти все базы данных так и работали всегда.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_berserk_*_*
сообщение 23.5.2014, 14:12
Сообщение #3





Гости








    


Цитата(berserk @ 22.5.2014, 23:32) *
Всем привет!

Кто нибудь знает возможно ли создание хранимой процедуры в firebird программно?
С консоли приходится заменять символ конца строки. "SET TERM".
Весь гугл перерыл, не могу найти как программно создать процедуру(((


имеется ввиду qyery,exec("CREATE PROCEDURE.......") ?

у меня не получилось. Всё дело видимо в том что конец строки внутки процедуры и в самом SQL является символ ";". Любая "IDE" делает примерно так

SET TERM ^;

CREATE PROCEDURE name
( input_parameter_name < datatype>, ... )
RETURNS
( output_parameter_name < datatype>, ... )
AS
DECLARE VARIABLE variable_name < datatype>;
BEGIN
  /* write your code here */
END^

SET TERM; ^


По крайней мере в firebird так точно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 23.5.2014, 19:35
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


попробуй set term выполнить отдельной командой, но в одной транзакции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
berserk
  опции профиля:
сообщение 23.5.2014, 20:53
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 9.2.2009
Пользователь №: 540

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Iron Bug @ 23.5.2014, 20:35) *
попробуй set term выполнить отдельной командой, но в одной транзакции.


пробовал так...
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setHostName("127.0.0.1");
    db.setDatabaseName("123");
    db.setUserName("SYSDBA");
    db.setPassword("masterkey");
    if (db.open())
    {
        qDebug() << "Ok" << endl;
        QSqlQuery query;
        db.transaction();
        query.exec("SET TERM ^;");
        query.exec("CREATE PROCEDURE proc AS DECLARE VARIABLE abc integer; BEGIN abc = 5; END^");
        query.exec("SET TERM; ^");
        qDebug() << query.lastError().text() << endl;
        db.commit();
    }
    else
    {
        qDebug() << "Error" << endl;
    }


на консоле то же самое что и если в одном запросе выполнять(((
"Dynamic SQL Error - SQL error code = -104 - Token unknown - line 1, column 5 - TERM Could not prepare statement"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 24.5.2014, 22:00
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


а нужен ли вообще тот терминатор при выполнении из запроса? в консоли он просто обозначает конец процедуры. а в запросе из интерфейса точка с запятой не является концом запроса.
убери нафиг и установку, и сам знак терминатора.

Сообщение отредактировал Iron Bug - 24.5.2014, 22:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_berserk_*_*
сообщение 26.5.2014, 12:34
Сообщение #7





Гости








    


Цитата(Iron Bug @ 24.5.2014, 22:00) *
а нужен ли вообще тот терминатор при выполнении из запроса? в консоли он просто обозначает конец процедуры. а в запросе из интерфейса точка с запятой не является концом запроса.
убери нафиг и установку, и сам знак терминатора.


Без него тоже не работает... Всё тему можно закрыть. Перешёл на Postgresql.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 26.5.2014, 19:20
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


без всяких терминаторов создавал и менял

" create procedure "
"alter procedure "

прекрасно работает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.4.2024, 15:45