[ dogriz @ 20.05.2008. 07:43 ] @
Treba da napišem proceduru sličnu ovoj:
Code:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE RBR_IZMENE (
    NAZIV_POLJA VARCHAR(30),
    ID INTEGER)
RETURNS (
    IZMENA_BROJ INTEGER)
AS
begin
    SELECT COALESCE(MAX(IZMENA_BROJ)+1, 0)
    FROM NEKA_TABELA
    WHERE NEKO_POLJE = :ID
    INTO :IZMENA_BROJ;
  suspend;
end^

SET TERM ; ^

U principu jednostavno, zar ne? Ali... NEKO_POLJE treba da bude po potrebi NEKO_POLJE ili NEKO_DRUGO_POLJE ili KOLONA_1 ili ...
Da li postoji mogućnost da se to NEKO_POLJE prosledi kao promenljiva, recimo preko gore definisanog ulaznog parametra NAZIV_POLJA?

Jedno je sigurno - ovako ne može :
Code:

WHERE :NAZIV_POLJA = :ID
WHERE (:NAZIV_POLJA AS FIELD_NAME) = :ID
... ????


Moram da priznam da sam prilično komplikovano objasnio jednostavan problem... HELP
[ savkic @ 20.05.2008. 13:43 ] @
Direktno ne možeš jer se procedura prilikom definisanja kompajlira u BLR, možeš koristiti EXECUTE STATEMENT izraz odnosno FOR EXECUTE STATEMENT ili EXECUTE BLOK (mislim da ovako ide ovaj poslednji). Samo vodi računa da se ti izrazi kompajliraju pri svakom izvršavanja tako da to neće biti previše brzo. Ako je to što procedura radi nešto jednostavno, možeš to raditi iz programa.
Pogledaj F1.5 release notes za više detalja oko EXECUTE STATEMENT sintakse i FB 2.0 oko EXECUTE BLOCK.
[ dogriz @ 21.05.2008. 06:45 ] @
Rešio sam problem jednom malo većom procedurom, sa više IF-ova i jednim ulaznim parametrom kojim određujem koji upit se izvršava, mislim da je to još najbrže i najelegantnije rešenje.

Hvala na pomoći