[ svrle @ 13.05.2007. 21:54 ] @
Hoću da napravim skriptu za update baze. Skripta bi trebalo da doda npr. jednu tabelu, pod uslovom da ona ne postoji u bazi, kako višestruko izvršavanje skripte ne bi prouzrokovalo grešku. Pade mi na pamet sledeće:

Code:

if ( not exists( select * from RDB$RELATIONS where RDB$RELATIONS.RDB$RELATION_NAME = 'Tabela1' ) ) then begin
    create table Tabela1( col1 integer, col2 integer );
end


Kad ovo izvršim kao upit, FB se buni zbog "if". Kad ovo stavim u stored proceduru, FB se buni zbog "create table". Pošto sam sada u situaciji "tera vola oko stola", zna li iko kako kreirati tabelu samo ako ona ne postoji i da li je to uopšte moguće?
[ Mr. Rejn @ 14.05.2007. 10:57 ] @
Buni se zbog 'create table' zato što ne podržava direktnu upotrebu DDL izjava u svom PSQL-u,ali
mislim da je to posredno podržano u verzijama FB1.5> pomoću EXECUTE STATEMENT.Pokušaj sa npr.:
Code:

CREATE PROCEDURE NEW_PROCEDURE 
as
begin
 if ( not exists( select * from RDB$RELATIONS where RDB$RELATIONS.RDB$RELATION_NAME = 'Tabela1' ) ) then
    EXECUTE STATEMENT 'create table Tabela1( col1 integer, col2 integer )';
end^
[ svrle @ 14.05.2007. 21:51 ] @
Mr. Rejn wrote:

> Buni se zbog 'create table' zato što ne podržava direktnu upotrebu
> DDL izjava u svom PSQL-u,ali mislim da je to posredno podržano u
> verzijama FB1.5> pomoću EXECUTE STATEMENT.Pokušaj sa npr.:


Puno hvala, to je bilo to.

PS: Svega ovog ne bi bilo da se Vladimir potrudio da na vreme pročita
dokumentaciju :-(
[ mbabuskov @ 28.05.2007. 12:21 ] @
Inace, ne moras pisati stored proceduru, moze sve da se uradi sa execute block:

execute BLOCK as
begin
if (not exists(select 1 from RDB$RELATIONS where RDB$RELATION_NAME = 't1')) then
execute statement 'create table t1 ( c char );';
end ^

Dakle, sve u jednoj naredbi.
[ svrle @ 28.05.2007. 19:49 ] @
mbabuskov napisa:

> Inace, ne moras pisati stored proceduru, moze sve da se uradi sa
> execute block:

Da, to sam u međuvremenu i uradio. Hvala. Samo sam malo začuđen ovim
Firebirdovim ograničenjima oblika "ko sme s kim" (DDL, PSQL,...) jer
obitavam u SQL Server svetu u kome nije bitno gde je "if", gde su
"create/alter table" i slično. Ali samo sam začuđen, ne i odvraćen :-)

--
Pozdrav,
Vladimir.
[ Mr. Rejn @ 29.05.2007. 20:03 ] @
Citat:
mbabuskov: Inace, ne moras pisati stored proceduru, moze sve da se uradi sa execute block:
execute BLOCK as
begin
if (not exists(select 1 from RDB$RELATIONS where RDB$RELATION_NAME = 't1')) then
execute statement 'create table t1 ( c char );';
end ^

Dakle, sve u jednoj naredbi.

Može li se znati na čemu si ovo poterao?Meni ne radi na IBExpert/FB 2.0.1:
[att_img]
[ Mr. Rejn @ 29.05.2007. 20:31 ] @
Moja greška,beše buđava verzija IBExpert-a (2007.02.22), sada radi (ver. 2007.05.03)