Проблема:
При выполнении 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, увидим что скажут разработчики.