Використання збережуваних процедур в Delphi

Компонент TIBStoredProc призначений для виконання збережених процедур, які зберігаються на сервері, і повернення результатів їх роботи. При з'єднанні з базою даних у властивість StoredProcedureNames завантажується список доступних в базі даних збережуваних процедур. З допомогою влястивості  StoredProcName можна вказати збережувану процедуру, результат роботи якої ми очікуємо.

Як правило, збережувані процедури мають набори вхідних і вихідних параметрів, які містяться у властивості Params. Звернутися до будь-якого з них можна за його індексом або за імені, використовуючи метод ParamByName. Загальна кількість параметрів, які містить збережувана процедура, зберігається у властивості ParamCount.

Метод Prepare здійснює підготовку процедури до виконання. Підготовка полягає в тому, що сервер оптимізує виконання і компіляцію процедури, після чого зберігає результат компеляції. Це скорочує до мінімуму час звернення до процедури. Визначити, чи готова збережена процедура до виконання, дозволяє властивість Prepared. Якщо властивість має значення True, то збережена процедура підготовлена ​​до виконання.

Процес підготовки процедури за методом Prepare є не обовязковим, так як вона виконується автоматично при використанні метоу ЕхесPrос. Проте слід відмітити, що явна підготовка процедури корисна при не однократному виклику збережуваної процедури. Тобто, якщо перед першим викликом процедури виконати метод Рrepare, то всі наступні виклики будуть здійснюватися на основі зробленої один раз підготовки. В іншому випадку підготовка буде виконуватися автоматично перед кожним виконанням збережуваної процедури.

По завершенні виконання процедури, необхідно викликати метод UnPrepare для того, щоб сервер звільнив ресурси виділені на зберігання результату компіляції.

Для виконання процедури, яка міститься на сервері, слід викликати метод ExecProc. У момент запуску збереженої процедури на сервері їй присвоюється унікальний ідентифікатор, доступ до якого можна отримати за допомогою властивості StmtHandlе.

Розглянемо простий приклад використання компонента TIBStroredProc. Створимо новий проект і на головну форму розмістимо наступні компоненти: IBDataBase1, IBTransaction1, IBStoredProc1, IBTable1, DataSource1, DBGrid1 і кнопку Button1 з допомогою якої будемо здійснювати виклик збережуваної процедури.

Далі налаштуємо з'єднання з базою даних autobazar.gdb. Компонент IBTable1 зв'яжемо з таблицею Cars. Також налаштуємо з'єднання компонента IBStoredProc1 з компонентами IBTransaction1 і IBDataBase1, після чого у властивості StoredProcName виберемо збережену процедуру  NUMBER_OF_CARS. Значення властивості DataSourse компонентів DBGrid1 встановимо рівним DataSource1.

Приклад

Приклад виконання збережуваної процедури з допомогою компонента IBStoredProc

Далі, на подію OnClick компонента Button1 напишемо код, який буде здійснювати виклик збережуваної процедури NUMBER_OF_CARS.

procedure TForm1.Button1Click(Sender: TObject);
var
count: integer;
begin
IBStoredProc1.ExecProc;
count := IBStoredProc1.ParamByName('out_count').AsInteger;
ShowMessage('Загальна кількість автомомбілів в таблиці Cars рівна: ' + IntToStr(count));
end;

Скачати даний проект можна за посиланням приклад використання компонента IBStoredProc.

Код збережуваної процедури  NUMBER_OF_CARS:

CREATE PROCEDURE NUMBER_OF_CARS
RETURNS (out_count INTEGER)
AS
BEGIN
SELECT COUNT(c.kod)
FROM Cars c
INTO :out_count;
SUSPEND;
END

Матеріал був корисним, поділись в соціальних мережах:

Якщо тобі сподобалась дана тема, залиш свій коментар