Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ALTER TABLE MODIFY pod warunkiem
Gabriel
post 13.11.2008, 08:05:45
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Na początek się przywitam. Hello. Mój pierwszy post na forum.

  1. [/b]ALTER TABLE schemat.nazwa_tablicy
  2. MODIFY (nazwa_kolumny NULL);
  3. [b]


Bardzo proste Nie smile.gif ale jeśli mam zestaw wielu wielu skryptów. I co jakiś czas aktualizuję bazę. Nie wiem czy dany skrypt został już wykonany czy nie. chciałbym napisać jakiegoś if then tylko tu właśnie się pojawia problem JAK ? Ma ktoś może jakiś pomysł ?

If nazwa_kolumny is not null then alter ....

--------------------------------------------------------------------------
Problem rozwiązany smile.gif
  1. [/b]DECLARE
  2. cnt VARCHAR2(1);
  3. BEGIN SELECT NULLABLE INTO cnt FROM USER_TAB_COLS WHERE table_name = 'tab_name' AND column_name = 'col_name';
  4. IF (cnt = 'N')
  5. THEN
  6. BEGIN EXECUTE IMMEDIATE 'ALTER TABLE tab_name MODIFY (col_name[b] NULL)';
  7. END;
  8. END IF;
  9. END;
  10. /
  11. [b]

[/b]--------------------------------------------------------------------------

Wykonywanie wile razy tych samych skryptów - ciąg dalszy. A co z dodawaniem kolumny która została już dodana ?

Znalazłem gdzieś w sieci to:

  1. begin execute immediate 'alter table po_products add concat char(1)';
  2. exception
  3. when others then
  4. /* OK if ORA-01430: column being added already exists in table */
  5. IF instr ( SQLERRM, 'ORA-01430' ) != 0 then NULL;
  6. else raise_application_error ( -20000, SQLERRM ); end IF;
  7. end;
  8. /


i właściwie działa ale czy nie ma jakiś warunków na to czy wogóle wykonywać dane zapytanie, obsługa exception chyba nie jest zbyt profesjonalne ?
--------------------------------------------------------------------------
zapewne rozwiązanie będzie analogicznie jak w pierwszym z problemów

Ten post edytował Gabriel 13.11.2008, 09:22:40
Go to the top of the page
+Quote Post
redman2
post 13.11.2008, 10:47:39
Post #2





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 13.10.2004

Ostrzeżenie: (0%)
-----


A dlaczego nie po prostu Audit ?

Kod
AUDIT ALTER TABLE ON schemat.nazwa_tablicy
by access
whenever successful;


I pozniej moglby stworzyc sobie Perspektywe na AUDIT TRAIL na tylko twoja tabele i problem rozwiazany
Go to the top of the page
+Quote Post
Gabriel
post 14.11.2008, 12:22:14
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.11.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No nie wiem czy to jest taki najprostszy sposób rozwiązania mojego problemu (w ogóle problemów z koniecznością wykonywania skryptów czasami wielokrotnie) ustawienie audytu
po pierwsze spowalnia bazy,
wymaga odpowiednich uprawnień (większych niż tradycyjny użytkownik bazy,ale do końca nie wgryzałem się co jest niezbędnym minimum),
no i chyba to jest dość zawiłe sprawdzać w ten sposób co kto zrobił, nie wiele to rozwiązanie różni się od mojego w którym czytam tablicę USER_TAB_COLS

Ale mimo wszystko dzięki za odpowiedź, każda informacja jest przydatna, zmusza do myślenia, kombinowania szukania.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 09:25