[DB2] Tabela ze zmaterializowanym zapytaniem.
Jan Słupicki - 23-03-2006 03:32
[DB2] Tabela ze zmaterializowanym zapytaniem.
Mam problem z utworzeniem zmaterializowanej tabeli. Używam skryptu: ---------- Drop table A; Drop table B; Drop table AB; Create table A ( A_ID Bigint NOT NULL Generated By Default As Identity(Start With 2, Increment By 2, Cache 20), A_TEXT Varchar(20) ); Create table B ( B_ID Bigint NOT NULL Generated By Default As Identity(Start With 1, Increment By 1, Cache 20), B_TEXT Varchar(20) ); insert into A(A_Text) values ('Text-1'); insert into B(B_Text) values ('Text-1'); commit; select * from A ,B where A_TEXT = B_TEXT;
Create table AB as (select * from A, B where A_TEXT = B_TEXT) data initially deferred refresh immediate;
select * from AB; ------------- I niestety wywala się przy tworzeniu tabeli AB z komunikatem: SQL20058N Pełna selekcja określona dla zmaterializowanej tabeli zapytania "UDB2.AB" nie jest poprawna. Kod przyczyny = "7". SQLSTATE=428EC Nie mogę nigdzie znaleźć co to jest ta przyczyna "7" !!! Nawet jak zapytanie uproszczę do "select * from A" to jest tak samo. Przy refresh deferred jest wszystko ok.
-- Jan Słupicki
Art - 24-03-2006 00:09
Jan Słupicki wrote: > Mam problem z utworzeniem zmaterializowanej tabeli. > Używam skryptu: > ---------- > Drop table A; > Drop table B; > Drop table AB; > Create table A ( > A_ID Bigint NOT NULL Generated By Default As Identity(Start With 2, > Increment By 2, Cache 20), > A_TEXT Varchar(20) > ); > Create table B ( > B_ID Bigint NOT NULL Generated By Default As Identity(Start With 1, > Increment By 1, Cache 20), > B_TEXT Varchar(20) > ); > insert into A(A_Text) values ('Text-1'); > insert into B(B_Text) values ('Text-1'); > commit; > select * from A ,B where A_TEXT = B_TEXT; > > Create table AB as > (select * from A, B where A_TEXT = B_TEXT) > data initially deferred > refresh immediate; > > select * from AB; > ------------- > I niestety wywala się przy tworzeniu tabeli AB z komunikatem: > SQL20058N Pełna selekcja określona dla zmaterializowanej tabeli zapytania > "UDB2.AB" nie jest poprawna. Kod przyczyny = "7". SQLSTATE=428EC > Nie mogę nigdzie znaleźć co to jest ta przyczyna "7" !!! > Nawet jak zapytanie uproszczę do "select * from A" to jest tak samo. Przy > refresh deferred jest wszystko ok. > Cytuje " Pełna selekcja podana w instrukcji CREATE TABLE, która zwróciła ten warunek, narusza co najmniej jedną regułę, zgodnie z opisem podanym w podręczniku SQL Reference. (...) Instrukcja nie może być wykonana, ponieważ narusza ograniczenia, w sposób opisany następującym kodem przyczyny: (...) 7 Gdy określona jest klauzula REFRESH IMMEDIATE: (...) Gdy nie ma klauzuli GROUP BY, każda tabela bazowa musi mieć zdefiniowany co najmniej jeden klucz unikalny i wszystkie kolumny takich kluczy muszą występować na liście selekcji w definicji zmaterializowanej tabeli zapytania. "
Pozdrawiam Art
Jan Słupicki - 24-03-2006 00:10
> Cytuje " > Pełna selekcja podana w instrukcji > CREATE TABLE, która zwróciła ten warunek, narusza co najmniej > jedną regułę, zgodnie z opisem podanym w podręczniku SQL > Reference. > (...) > Instrukcja nie może być wykonana, ponieważ narusza ograniczenia, > w sposób opisany następującym kodem przyczyny: > (...) > 7 Gdy określona jest klauzula REFRESH IMMEDIATE: > (...) > Gdy nie ma klauzuli GROUP BY, każda tabela bazowa musi mieć > zdefiniowany co najmniej jeden klucz unikalny i wszystkie > kolumny takich kluczy muszą występować na liście selekcji w > definicji zmaterializowanej tabeli zapytania. > "
Dzięki. Gdzie to jest ? (abym nie musiał znów pytać jak coś podobnego mi wyświetli).
-- Jan Słupicki
Art - 25-03-2006 01:20
Jan Słupicki wrote: >> Cytuje " >> Pełna selekcja podana w instrukcji >> CREATE TABLE, która zwróciła ten warunek, narusza co najmniej >> jedną regułę, zgodnie z opisem podanym w podręczniku SQL >> Reference. >> (...) >> Instrukcja nie może być wykonana, ponieważ narusza ograniczenia, >> w sposób opisany następującym kodem przyczyny: >> (...) >> 7 Gdy określona jest klauzula REFRESH IMMEDIATE: >> (...) >> Gdy nie ma klauzuli GROUP BY, każda tabela bazowa musi mieć >> zdefiniowany co najmniej jeden klucz unikalny i wszystkie >> kolumny takich kluczy muszą występować na liście selekcji w >> definicji zmaterializowanej tabeli zapytania. >> " > > > Dzięki. Gdzie to jest ? > (abym nie musiał znów pytać jak coś podobnego mi wyświetli). >
Ja uzywam "Edytora komend". Jest on w narzedziach DB2. W wielu przypadkach opisany jest blad z wyjasnieniami i mozliwe przyczyny wystapienia.
Art
Jan Słupicki - 25-03-2006 01:20
> Ja uzywam "Edytora komend". Jest on w narzedziach DB2. > W wielu przypadkach opisany jest blad z wyjasnieniami i mozliwe przyczyny > wystapienia.
Też używałem "Edytora komend". Problem był w tym że puszczałem cały skrypt i wtedy dostawałem tylko ograniczony komunikat o błędzie. Dopiero teraz jak wpisałem samą komendę tworzenia tabeli to dostałem pełny komunikat o błędzie. Dzięki za pomoc.
-- Jan Słupicki
Artur - 25-03-2006 01:21
By uzyskać dokładny opis błędu w tekstowym oknie komend, jak i w graficznym edytorze komend wystarczy wpisać db2 ? SQLCODE, na przykład:
db2 ? SQL20058N
W podobny sposób można też wyświetlić opis danego SQLSTATE, choć tu komunikat jest już mniej dokładny (z definicji SQLSTATE zawiera ogólne opisy błędów odnoszące się do standardu SQL), np:
db2 ? 428EC
Pozdrawiam,
-- Artur Wroński
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
zanotowane.pldoc.pisz.plpdf.pisz.ploefg.opx.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 |
|