SQL_execute

c/c++pascalsql

BOOL [cd_]SQL_execute([cdp_t cdp], const char * statement, uns32 * results);
function [cd_]SQL_execute([cdp : cdp_t]; statement : Pchar; var results) : Boolean;
FUNCTION SQL_execute(IN statement CLOB) RETURNS INT;

Parametry

statement příkaz jazyka SQL
results pole čísel, do nichž se zapíše informace o výsledku operace; pole musí mít svou první složku před zavoláním inicializovanou hodnotou nula
[cdp kontextová proměnná klienta]

Od verze:

5.0, úprava ve verzi 8.0

Popis

Funkce vykoná příkaz jazyka SQL zadaný v parametru statement. Při překladu volání této funkce se nekontroluje smysluplnost SQL příkazu - případná syntaktická chyba příkazu se projeví až při běhu, kdy SQL server ohlásí, že nemůže splnit požadavek.

Zadáte-li více příkazů oddělených středníkem, všechny se provedou v jedné transakci.

POZOR! Funkce má různé syntaxe pro různá prostředí (klientské API a SQL)!

V parametru statement může být více SQL příkazů oddělených středníkem.

Při volání funkce z externího jazyka je nutné uvést výstupní parametr results. Tímto parametrem je pole 32-bitových celých čísel bez znaménka. Pole musí obsahovat nejméně tolik složek, kolik příkazů jazyka SQL je zadáno v parametru statement, maximálně však 10. Volání procedury se nebere jako jeden příkaz, ale uvažují se jednotlivé příkazy v ní obsažené. Pole musí mít svou první složku před zavoláním inicializovanou hodnotou nula. Parametr results slouží k získání informací o výsledku provádění příkazů. Má relevantní hodnotu pouze v případě, že funkce SQL_execute skončila úspěšně. Pokud byl proveden příkaz UPDATE, DELETE nebo INSERT, hodnotou příslušného prvku pole je počet zpracovaných záznamů. Pokud byl proveden SELECT (není SQL příkaz, lze ho však zde použít pro otevření dotazu), pak hodnotou příslušného prvku pole je číslo otevřeného kurzoru a s tímto otevřeným kurzorem je možné dále pracovat (stejně jako by byl otevřen pomocí funkce Open_cursor_direct). Otevřený kurzor se zavírá pomocí funkce Close_cursor.

Hodnota funkce

Klientská funkce vrací hodnotu FALSE, pokud se akci podařilo úspěšně provést. V opačném případě vrací TRUE a povahu chyby lze zjistit voláním funkce Signalize.

Při použití této funkce v jazyce SQL se vrací buď číslo kompilační chyby, pokud příkazy předané jako parametr nelze přeložit, nebo 0, pokud bylo provedení příkazů úspěšné - použití viz Dynamické SQL příkazy uvnitř uložených procedur.

Příklad v SQL:

může-li dojít ke kompilační chybě, je třeba ji ošetřit v kódu (nelze zachytit handlerem):

SET tabname="neex_tab" ;
SET pomstr="INSERT INTO "||tabname||" DEFAULT VALUES";
SET err=SQL_execute(pomstr);
IF err=1069 THEN 
  CALL Log_write("kompilační chyba: tabulka >"|| tabname||"< neexistuje!!");  
  SIGNAL user_except_1;
ELSEIF err>0 THEN
  CALL Log_write("kompilační chyba:"||Int2str(err));  
ELSE ...

Viz