Próbuję uruchomić wiele instrukcji ddl w ramach jednej instrukcji Wykonaj natychmiastowe. Myślałem, że to będzie całkiem proste, ale wygląda na to, że się mylę.ORACLE Tworzenie partycji instrukcji DDL w ramach wykonywania natychmiastowego
Pomysł jest taki:
declare v_cnt number;
begin
select count(*) into v_cnt from all_tables where table_name='TABLE1' and owner = 'AMS';
if v_cnt = 0 then
execute immediate 'CREATE TABLE TABLE1(VALUE VARCHAR2(50) NOT NULL) ALTER TABLE TABLE1 ADD (MYVAL2 NVARCHAR2(10))';
end if;
end;
jednak skutkuje błędem
ORA-00911: nieprawidłowy znak ORA-06512: w wierszu 10
Każdy z instrukcje wewnątrz partii działają poprawnie, jeśli wykonam je samodzielnie. i jeśli wezmę to oświadczenie i wykonam je, będzie działało dobrze (z; między dwoma instrukcjami). Jeśli usunę; między instrukcjami otrzymuję inny błąd dotyczący nieprawidłowej opcji: plan jest taki, że będę mógł zbudować tabelę, wyeksportować schemat tabeli dla tej tabeli, zawierający wszystkie jej instrukcje zmian, a następnie uruchomić partię przeciwko innemu systemowi jako część procesu instalacji/aktualizacji.
W jaki sposób mogę grupować te instrukcje DDL w ramach pojedynczego wykonania natychmiast? A może jest lepszy sposób na zrobienie tego, czego potrzebuję?
Jestem trochę nowicjuszem Oracle, muszę przyznać. Dziękuję wszystkim za cierpliwość.
Tworzenie tabeli i zmiany są eksportowane jako pojedynczy plik, a teraz jest ich wystarczająco dużo, że warto spróbować zrobić to w 1 WYKONAJ NATYCHMIASTOWĄ vs wiele na obiekt db. – Beta033
W takim przypadku sugerowałbym po prostu wygenerowanie poprawnego DDL w pierwszej kolejności. Spójrz na DBMS_METADATA. :-) – cagcowboy
wygląda na to, że może rozwiązać mój problem. Niestety, oczywista odpowiedź była pod moim nosem. Wyuczona lekcja: nie używaj TOAD do tworzenia struktury wyjściowej, nawet jeśli jest w niej ciekawe menu GUI. – Beta033