ďťż
 
[SQLITE] kilka =?ISO-8859-2?Q?p=F3l_autoincrement_lub_sekw?==?ISO-8859-2?Q?encje?= ďťż
 
[SQLITE] kilka =?ISO-8859-2?Q?p=F3l_autoincrement_lub_sekw?==?ISO-8859-2?Q?encje?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[SQLITE] kilka =?ISO-8859-2?Q?p=F3l_autoincrement_lub_sekw?==?ISO-8859-2?Q?encje?=



=?ISO-8859-2?Q?Marcin_Luboja=F1ski?= - 30-03-2007 00:07
[SQLITE] kilka =?ISO-8859-2?Q?p=F3l_autoincrement_lub_sekw?==?ISO-8859-2?Q?encje?=
  Witam
Potrzebuję kilku pól autoincremental w tabeli. Czytałem
http://www.sqlite.org/cvstrac/wiki/w...UnsupportedSql gdzie piszą że
czegoś takiego w SQLite nie ma i że można to zrobić samemu przez
sekwencje (których SQLite tez nie obsługuje).
Na końcu adnotacja że zostało to dodane w SQLite 3.1.
Niestety jest to tak napisane że ja nie wiem co zostało dodane. Bo kilku
pól autoincremental nie można dodać a sekwencji też nie ma.

Może ktoś miał podobny problem i rozwiązał bo jakoś sensownie?

Pozdrawiam
Marcin Lubojański





=?ISO-8859-2?Q?Jaros=B3aw_Staniek?= - 30-03-2007 00:07

  Marcin Lubojański said the following, On 2007-03-29 13:24:

> Potrzebuję kilku pól autoincremental w tabeli. Czytałem
> http://www.sqlite.org/cvstrac/wiki/w...UnsupportedSql gdzie pisząże
> czegoś takiego w SQLite nie ma i że można to zrobić samemu przez
> sekwencje (których SQLite tez nie obsługuje).
> Na końcu adnotacja że zostało to dodane w SQLite 3.1.
> Niestety jest to tak napisane że ja nie wiem co zostało dodane. Bo kilku
> pól autoincremental nie można dodać a sekwencji też nie ma.

Witam,
Pomyślalem sobie rozwiążę ten problem bo i tak w Kexi będę chciał mieć obsługę
dowolnej wartości autoincement spoza klucza podstawowego, w dowolnej liczbie.

Oto przyklad rozwiazania na triggerach, jako że w SQLite w wielu rzeczach
pomagają triggery (moze istnieje prostsze):

Zalozmy ze chcesz miec tabele 'test' z polami a i b - oba autoincrement ale
nie PK. Potrzebny jeden trigger na pole.

-----------
CREATE TABLE test (a integer, b integer, txt text);

CREATE TRIGGER test_a_seq_trigger AFTER INSERT ON test FOR EACH ROW BEGIN
update test set a=(ifnull((select max(a)+1 from test), 1)) where
rowid=new.rowid and new.a isnull; END;

CREATE TRIGGER test_b_seq_trigger AFTER INSERT ON test FOR EACH ROW BEGIN
update test set b=(ifnull((select max(b)+1 from test), 1)) where
rowid=new.rowid and new.b isnull; END;

insert into test values (null, null, 'foo');
insert into test values (null, 7, 'bar');
insert into test values (null, null, 'text');

select * from test;
a|b|txt
1|1|foo
2|7|bar
3|8|text
-----------

Notki: 2-gi INSERT wstawia jawnie wartosc 7 - zeby nie modyfikowac jej
potrzebny byl warunek 'new.b isnull' triggera. rowid=new.rowid zmienia tylko
wstawiony wiersz. Uzycie ifnull() jest potrzebne, by bylo z czym wystartowac,
gdy tabela jest pusta.

Co do wydajności to koszt max() jest stały, a ciało triggera jest (AFAIK)
zamieniane na mikrokod przy pierwszym uzyciu.

To rozwiazanie mi sie podoba bo mozna ustawic "skok" sekwencji, wlaczeniez
malejąca oraz wartosc poczatkową. Inna zaleta to ta, ze wszystko sie dzieje po
stronie "serwera" i bez patchowania sqlite.

PS: W Kexi pewnie użyję niejawnie w/w mechanizmu do obslugi zapytan wjezyku
KEXISQL (pewien podzbior SQL):

CREATE TABLE test
(a integer autoincrement, b integer autoincrement, txt text);
^^^^^^^^^^ ^^^^^^^^^^
(tzn. triggery beda sie niejawnie tworzyc).

--
regards / pozdrawiam, Jaroslaw Staniek
Sponsored by OpenOffice Polska (http://www.openoffice.com.pl/en) to work on
Kexi & KOffice: http://www.kexi.pl/en, http://www.koffice.org
KDE3 & KDE4 Libraries for MS Windows: http://kdelibs.com, http://www.kde.org




=?ISO-8859-2?Q?Marcin_Luboja=F1ski?= - 31-03-2007 00:06

  Jarosław Staniek wrote:
> Marcin Lubojański said the following, On 2007-03-29 13:24:
>
>> Potrzebuję kilku pól autoincremental w tabeli. Czytałem
>> http://www.sqlite.org/cvstrac/wiki/w...UnsupportedSql gdzie piszą że
>> czegoś takiego w SQLite nie ma i że można to zrobić samemu przez
>> sekwencje (których SQLite tez nie obsługuje).
>> Na końcu adnotacja że zostało to dodane w SQLite 3.1.
>> Niestety jest to tak napisane że ja nie wiem co zostało dodane. Bo kilku
>> pól autoincremental nie można dodać a sekwencji też nie ma.
>
> Witam,
> Pomyślalem sobie rozwiążę ten problem bo i tak w Kexi będę chciał mieć
> obsługę dowolnej wartości autoincement spoza klucza podstawowego, w
> dowolnej liczbie.
>
> Oto przyklad rozwiazania na triggerach, jako że w SQLite w wielu
> rzeczach pomagają triggery (moze istnieje prostsze):
>
> Zalozmy ze chcesz miec tabele 'test' z polami a i b - oba autoincrement
> ale nie PK. Potrzebny jeden trigger na pole.
>
> -----------
> CREATE TABLE test (a integer, b integer, txt text);
>
> CREATE TRIGGER test_a_seq_trigger AFTER INSERT ON test FOR EACH ROW
> BEGIN update test set a=(ifnull((select max(a)+1 from test), 1)) where
> rowid=new.rowid and new.a isnull; END;
>
> CREATE TRIGGER test_b_seq_trigger AFTER INSERT ON test FOR EACH ROW
> BEGIN update test set b=(ifnull((select max(b)+1 from test), 1)) where
> rowid=new.rowid and new.b isnull; END;
>
> insert into test values (null, null, 'foo');
> insert into test values (null, 7, 'bar');
> insert into test values (null, null, 'text');

Dzięki wielkie. Nie wpadłem na to że można zrobić sobie triggera z
emulowaną sekwencją ;-D

Pozdrawiam
Marcin Lubojański
--
www.tramping.slask.pl
www.duzy-biust.pl
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf Kilka podstawowych =?UTF-8?B?cHl0YcWEIG8gbG9nb3dhbmllIHXFvHl0a293?==?UTF-8?B?bmlrw7N3?= Jak wyciągnąć fragment grafiki (klatka, kilka sekund video) z pliku Gimp -> duzy obraz na kilka mniejszych WWW pilne !!! [MySQL] przeniesc kilka baz do jednej - jak najlepiej? [sql] kilka tabel -> jedna tabela
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wawa19wwa91.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com