Немогу выполнить хранимую процедуру - system error ...

Запросы, планы, оптимизация запросов, ...

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

Ответить
svalx
Сообщения: 5
Зарегистрирован: 24 ноя 2005, 12:34

Немогу выполнить хранимую процедуру - system error ...

Сообщение svalx » 26 ноя 2005, 13:01

Создал хранимую процедуру в FB 1.52 вида:

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

СREATE PROCEDURE ADDNEWS (
    SUBJECT VARCHAR(60),
    TEXT BLOB SUB_TYPE 1 SEGMENT SIZE 400,
    AUTOR VARCHAR(20))
AS
DECLARE VARIABLE AUTORID INTEGER;
begin
  SELECT E.TABNAMBER FROM EMPLOYEE E JOIN SCOOLPEOPLE S
  ON E.peopleid = S.peopleid
  WHERE UPPER(S.login) = UPPER(:autor)
  INTO :autorid;
  INSERT INTO advertisement (title, advertisementtext, tabnamber) VALUES (:subject, :text, :autorid);
  SUSPEND;
end
Её назначение - добавлять запись в таблицу advertisement. В IBExpert в редакторе SP и в отладчике процедура прекрасно работает. Но вот выполнить её из скрипта не удаётся, т.е.

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

EXECUTE PROCEDURE addnews ('selena', 'qqqqqqq', 'aaaaaaaaaaaaaa')
выдаёт ошибку:
Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
internal error.
Транзакция откачена...


Если посмотреть в логах IBMonitor, то при выполнении процедуры непосредственно из редактора SP в IBExpert в логе создаётся запись "EXECUTE PROCEDURE addnews (?, ?, ?)", а если из скрипта, или через ADO, то EXECUTE PROCEDURE addnews ('selena', 'qqqqqqq', 'aaaaaaaaaaaaaa')...
Поэтому я думаю, что дело в том, что входные параметры имеют текстовые значения... Хотя формат полей в таблице для вставки совпадает с форматом входных параметоров процедуры.
Может быть что-то где-то нужно конвертировать? Я поэкспериметировал и понял, что если формат входящих параметров процедуры числовой, то проблем не возникает... Но мне необходимы текстовые.
Если кто-нибудь сталкивался с такой проблемой, буду весьма благодарен за подсказку...[/code]

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 26 ноя 2005, 21:34

Я не работал с Блобами, но, по моему, нельзя в процедуре записать Блоб из параметра.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 27 ноя 2005, 09:04

Не злоупотребляй кросспостингом, пожалуйста. Ты задал этот вопрос также и на sql.ru.

svalx
Сообщения: 5
Зарегистрирован: 24 ноя 2005, 12:34

Сообщение svalx » 27 ноя 2005, 17:18

dimitr писал(а):Не злоупотребляй кросспостингом, пожалуйста.
Хорошо. Хотя я не знал, что это возбраняется...

Gage
Да, действительно, проблема была именноо в блобах.

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

Сообщение kdv » 27 ноя 2005, 17:32

в процедурах нет никаких проблем с записью блоба из параметров. кроме того, segment size задавать не надо, это написано в FAQ.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 05 дек 2005, 09:40

Зато есть большая проблема с преобразованием строки в блоб-параметр для процедуры. Internal error возникает именно потому что человек описал параметр как BLOB а пытается в него запихнуть CHAR.

Ответить