Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ALTER TABLE MODIFY pod warunkiem
Forum PHP.pl > Forum > Bazy danych > Oracle
Gabriel
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
redman2
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
Gabriel
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.