Runtime error occurred: 6550

Проблема: 
При выполнении PL/SQL выражения в Lazarus — возникает ошибка выполнения:

Runtime error occurred: 6550 (ORA-06550: line 1, column 6: PLS-00103: Encountered the symbol «» when expecting one of the following: begin case declare exit for goto if loop mod null pragma raise return select update while with

Инструментарий:
IDE: Lazarus v1.2.4-fpc-2.6.4-win32
Компоненты: ZEOSDBO-7.1.3a-stable
База данных: Personal Oracle Database 11g Release 11.2.0.3.0 — 64bit
Инструментальная среда разработки: Oracle SQL Developer, TOAD


Описание:
Мне нужно выполнить PL/SQL скрипт, который передает некое значение в БД:

BEGIN
  PKG_DOCUMENTS.SetValue('1');
END;

Данный код выполняется в TOAD’е или SQL Developer’е.
Создадим небольшой пример выполнения скрипта для Lazarus

with TZQuery.Create(nil) do
try
  Connection := <SomeConnection>;
  SQL.Text := 'begin
                 PKG_DOCUMENTS.SetValue('
'1'');
               end;'

  ExecSQL; // <- ошибка тут
finally
  Free;
end;

Все выполняется отлично, но когда выполняю данный PL/SQL код с использованием компонент ZEOS, в результате получаю ошибку выполнения:

Runtime error occurred: 6550 (ORA-06550: line 1, column 6: PLS-00103: Encountered the symbol «» when expecting one of the following: begin case declare exit for goto if loop mod null pragma raise return select update while with

Решение:
Когда к PL/SQL коду добавить символ завершения строки (#0) — код выполняется успешно. После изменений, код будет выглядеть следующим образом:

...
SQL.Text := 'begin
               PKG_DOCUMENTS.SetValue('
'1'');
             end;'
+ #0;
...

Дополнительно:
Пример пакетной процедуры приведен ниже:

CREATE OR REPLACE PACKAGE PKG_DOCUMENTS AS
  PROCEDURE SetValue(nZoneID NUMBER);
END Documents;
/
CREATE OR REPLACE PACKAGE BODY PKG_DOCUMENTS AS
  PROCEDURE SetValue(nValueID NUMBER) IS
  BEGIN
    ...;
  END SetValue;
END PKG_DOCUMENTS;
/


PS: Оставил Ticket на sourceforge.net, увидим что скажут разработчики.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *