Wypowiedzi
-
Wojciech Gardziński:
:) Jak się wkleja swój wątek gdzie popadnie, to niczego innego nie można się spodziewać. Temat, widzę, ma Pan założony, więc są dwie drogi. Albo czekać na rozwiązanie, albo zapłacić ludziom pieniądze i mieć problem rozwiązany. Spam nie jest najszczęśliwszym wyjściem, a tym bardziej obrażanie ludzi.
Wojciech T.:
Psze bardzo. Polecam się na przyszłość.
Wojciech Gardziński:
Ależ poważny problem! ;)
http://www.goldenline.pl/forum/1667616/konsolidacja-da...
(Oczywiście "baza internetowa" to dowolna baza danych, również excelki, SQLSy, a nawet CSVki)
Dziękuję, spam zgłoszony.
Niczego innego po "Senior Oracle DBA & Developer" się nie spodziewałem (a już na pewno nie rozwiązania problemu).
Mimo wszystko pozdrawiam. -
Wojciech Gardziński:
Ależ poważny problem! ;)
http://www.goldenline.pl/forum/1667616/konsolidacja-da...
(Oczywiście "baza internetowa" to dowolna baza danych, również excelki, SQLSy, a nawet CSVki)
Dziękuję, spam zgłoszony. -
Tego szukałem. Dzięki. Temat zamknięty.
-
Wojciech T.:
Jeśli dam od razu
alter type nazwa_typu
add attribute col4 number invalidate;
wówczas mam wszystko pięknie. Typ dziedziczy, tabela również. Ale może istnieje jakiś magiczny alter table?
Errata, miało być:
Jeśli dam od razu
alter type nazwa_typu
add attribute col4 number cascade; -
create type nazwa_typu as object (
col1 number,
col2 number);
create type nazwa_typu2 under nazwa_typu
(col3 number);
create table nazwa_tablicy of nazwa_typu2;
Do tego miejsca wszystko gra. Jednak teraz:
alter type nazwa_typu
add attribute col4 number invalidate;
Rozkompilowuje typ nazwa_typu2, wiadomo. Jednak po przekompilowaniu typ jest poprawny, tzn. widać odziedziczona kolumne, jednak w tablicy nie widać. Wiem, że powinienem użyć opcji cascade podczas alter type, jednak załóżmy, że się pomyliłem i nie użyłem. Jak "odświeżyć" definicję tablicy, jak sprawić, żeby "zobaczyła" ten poprawny, rozszerzony typ?
Jeśli dam od razu
alter type nazwa_typu
add attribute col4 number invalidate;
wówczas mam wszystko pięknie. Typ dziedziczy, tabela również. Ale może istnieje jakiś magiczny alter table?Wojciech T. edytował(a) ten post dnia 21.07.11 o godzinie 15:12 -
A może "Bezpieczeństwo baz danych bez danych"?
-
Tomasz Drzazga:
http://www.youtube.com/watch?v=6jMiXcJ-rvE
Wymyśliłem trochę inny sposób. Skopiowałem wszystkie nazwy kolumn ze struktury tabeli i wkleiłem i jest prościej.
Zrobiłem insert i działa
INSERT INTO TABELA1
select ap_dobi_sq.NEXTVAL, a,b,c,d from TABELA2 where id=4)); -
Mnóstwo masek i super wyjaśnienia:
http://www.techonthenet.com/oracle/functions/to_char.php
http://www.techonthenet.com/oracle/functions/to_timest...
To Ci wystarczy, żebyś mógł operować na timestampie tak jak Ci się to tylko podoba.Wojciech T. edytował(a) ten post dnia 17.05.11 o godzinie 14:12 -
Ireneusz Ptak:
Wojciech T.:
sprawdzałem, puszczałem - działa.
Ciekawe - jaka wersja Oracle?
U mnie ten skrypt sie wywala - dziala dopiero po zmianie tego kursora w petli.
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production
A co dokładnie się wywala? Z ciekawości :) -
Fragment:
execute immediate
'update nazwa_tab set DWARUNEK3= substr(a.DWARUNEK,1,4000)
where sid=a.sid';
generuje błąd. Należy wcześniej przypisać tego substring'a do zmiennej, a potem tą zmienną robić update i po błędzie :) -
declare
lv_col varchar2(4000);
begin
execute immediate 'alter table nazwa_tab add(DWARUNEK3
varchar2(4000))';
for rec in (select * from nazwa_tab) loop
lv_col := substr(rec.DWARUNEK, 1, 4000);
execute immediate 'update nazwa_tab set DWARUNEK3 = :1 where sid = :2' using lv_col, rec.sid;
commit;
end loop;
execute immediate 'alter table nazwa_tab drop column DWARUNEK';
execute immediate 'ALTER TABLE nazwa_tab RENAME COLUMN DWARUNEK3 to DWARUNEK';
end;
sprawdzałem, puszczałem - działa. Do poprawy:
1) Wydajność
2) ogólna konstrukcja tego szkicu (żeby wyglądał ;] )Wojciech T. edytował(a) ten post dnia 10.05.11 o godzinie 13:33 -
Zrób inaczej. Dobrze byłoby, gdybyś miał jakąś tabelę z parametrami.
1) Stwórz tam sobie parametr o nazwie free_id_twoja_tablica o wartości min(id) z tabeli docelowej.
2) W tablicy docelowej zakładasz trigger after insert/delete, który po wstawieniu/usunięciu wiersza sprawdza min(id) z tabeli docelowej i robi update ww. parametru.
3) Na triggerze na insert dajesz jako id wartość parametru.
Powinno działać, nie sprawdzałem, to tylko mój pomysł na szybko. -
A moje zdanie jest takie, że nie potrzebujesz softu do synchronizacji tylko bata na developerów modyfikujących bazę bezpośrednio na produkcji.Wojciech T. edytował(a) ten post dnia 10.03.11 o godzinie 10:48
-
Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Filmy grozy
-
select substr(:text,
decode (rownum, 1, 1, instr(:text, ',', 1, (rownum - 1)) + 1),
decode (instr(:text, ',', 1, (rownum)), 0, length(:text) + 1, instr(:text, ',', 1, (rownum)))
- decode (rownum, 1, 1, instr(:text, ',', 1, (rownum - 1)) + 1)
) col1
from dual
connect by rownum <= length(:text) - length(replace(:text, ',', null)) + 1
Zakładając, że znakiem rozdzielającym wartości jest przecinek (co chyba nie jest problemem).Wojciech T. edytował(a) ten post dnia 15.02.11 o godzinie 15:12 -
SET @query='select pole,kolumna'+rtrim(cast(@i as char))+ 'from table where record='''+@record+''''
Powinno pomóc, przynajmniej tak się w oraclu to przekazuje.Wojciech T. edytował(a) ten post dnia 02.12.10 o godzinie 13:23 -
Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy Filmy grozy
-
Katarzyna Jankowska:
W imieniu firmy FT Training & Software zapraszam serdecznie na szkolenie w dniach 18-19.11.2010 r. w godz. 9.00 - 17.00 do Warszawy na ul. Bartycka 116.
Wiecej informacji o cenie i programie szkolenia znajdziecie na: http://ftts.pl
Miło będzie Was poznać :)
"Troszkę" mi to spamem zalatuje :) -
Jarek Tkaczyk:
Wojciech T.:
Z wymagań Jarka Tkaczyka to nie wynika, a jest wręcz przeciwnie:
[...]
Głównym celem tej tabeli jest wyświetlanie użytkownikowi historii zmian, więc śmiem twierdzić, że tabela będzie dość często odpytywana. Chyba, że nie mam racji i zapytania będą sporadyczne. Wtedy zgoda. Można się pokusić o trzymanie wszystkiego "w jednym worku", lecz w przypadku gdy np. 10 użytkowników naraz zacznie sobie śledzić zmiany na rekordach, to może zrobić się dość nieciekawie :)
Z moich wymagań zawartych w krótkim zdaniu można różne wnioski wyciągać, więc już piszę konkretniej.
Otóż w rzeczy samej chodzi o małą bazę, stosunkowo niewiele rekordów i sporadyczne przeglądanie historii, przy czym użytkowników jednocześnie odpytujących bazę może być w porywach 2-3.
Zatem główną kwestią, jak chciałem poruszyć, to wygoda pracy na archiwum, wydajność tutaj nie stanowi problemu.
No to chyba wygrywa armata :) -
Maciej Niedźwiecki:
Z wymagań Jarka Tkaczyka to nie wynika, a jest wręcz przeciwnie:
Wojciech T.:
Dawid Rokita:
Przechowywanie archiwum >300 tabel w jednej?
Moja armata to rozwiązanie z jednego z moich systemów gdzie jest >300 tabel. Nie wyobrażam sobie robienia do każdej z nich klona z archiwum :-)
To jest prosta tabela, która potencjalnie może mieć bardzo dużo rekordów, ale będzie mocniej wykorzystywana raczej dość rzadko.
A zawsze można ją co jakiś czas zbackupować i założyć od nowa, np. raz w roku.
"W jaki sposób najlepiej wykonać funkcjonalność historii zmian w bazie, przy czym głównym celem jest wyświetlenie użytkownikowi kolejnych wersji, a nie logi poszczególnych zmian?
Tak by można było porównać kolejne wersje i uwidocznić zmienione dane (parami wersja X i wersja X+1)."
Głównym celem tej tabeli jest wyświetlanie użytkownikowi historii zmian, więc śmiem twierdzić, że tabela będzie dość często odpytywana. Chyba, że nie mam racji i zapytania będą sporadyczne. Wtedy zgoda. Można się pokusić o trzymanie wszystkiego "w jednym worku", lecz w przypadku gdy np. 10 użytkowników naraz zacznie sobie śledzić zmiany na rekordach, to może zrobić się dość nieciekawie :)