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 := ;
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, увидим что скажут разработчики.

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