Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?

[es] :: Firebird/Interbase :: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?

[ Pregleda: 3182 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

svrle
Vladimir Svrkota
Programer; AlfaNum, Novi Sad
(http://www.alfanum.co.rs)
Novi Sad

Član broj: 1392
Poruke: 29
80.74.160.*

Jabber: svrkota@elitesecurity.org


Profil

icon Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?13.05.2007. u 21:54 - pre 206 meseci
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?
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.adsl-2.sezampro.yu.



+4 Profil

icon Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?14.05.2007. u 10:57 - pre 206 meseci
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^

Ag + Na -> Xe
 
Odgovor na temu

svrle
Vladimir Svrkota
Programer; AlfaNum, Novi Sad
(http://www.alfanum.co.rs)
Novi Sad

Član broj: 1392
Poruke: 29
*.net
Via: [es] mailing liste

Jabber: svrkota@elitesecurity.org


Profil

icon Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?14.05.2007. u 21:51 - pre 206 meseci
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 :-(
 
Odgovor na temu

mbabuskov
Milan Babuškov
Subotica

Član broj: 4718
Poruke: 217
*.subotica.net.

Sajt: www.comp.rs/izradasajta


+6 Profil

icon Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?28.05.2007. u 12:21 - pre 205 meseci
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.
 
Odgovor na temu

svrle
Vladimir Svrkota
Programer; AlfaNum, Novi Sad
(http://www.alfanum.co.rs)
Novi Sad

Član broj: 1392
Poruke: 29
*.net
Via: [es] mailing liste

Jabber: svrkota@elitesecurity.org


Profil

icon Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?28.05.2007. u 19:49 - pre 205 meseci
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.
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.adsl-1.sezampro.yu.



+4 Profil

icon Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?29.05.2007. u 20:03 - pre 205 meseci
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:

Ag + Na -> Xe
Prikačeni fajlovi
 
Odgovor na temu

Mr. Rejn
Deki Karamatijević
Sremčica

Član broj: 2514
Poruke: 515
*.adsl-1.sezampro.yu.



+4 Profil

icon Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?29.05.2007. u 20:31 - pre 205 meseci
Moja greška,beše buđava verzija IBExpert-a (2007.02.22), sada radi (ver. 2007.05.03)
Ag + Na -> Xe
 
Odgovor na temu

[es] :: Firebird/Interbase :: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji?

[ Pregleda: 3182 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.