Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

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

  • 6 odgovora
  • 4.117 pregleda

Najnovija ↓

Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji? 13.05.2007. u 22:54 · pre 237 meseci #1
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?
Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji? 14.05.2007. u 11:57 · pre 237 meseci #2
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^
Potpis
Ag + Na -> Xe
Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji? 14.05.2007. u 22:51 · pre 236 meseci #3
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 :-(
Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji? 28.05.2007. u 13:21 · pre 236 meseci #4
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.
Potpis
Milan Babuškov
http://www.guacosoft.com/
Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji? 28.05.2007. u 20:49 · pre 236 meseci #5
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.
Re: Kako kreirati tabelu, ali samo pod uslovom da ona ne postoji? 29.05.2007. u 21:03 · pre 236 meseci #6
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:
Potpis
Ag + Na -> Xe
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme