Jestem początkującym w Oraclu, mam problem, tworzę procedurę do zmiany typów danych wszystkich kolumn 'TTT' we wszystkich tabelach użytkownika ADM. Poczytałem troche i mam już coś takiego:
CREATE OR REPLACE procedure to_varchar2 IS cursor sql_n IS SELECT DISTINCT aaa.table_name FROM sys.all_tab_cols aaa WHERE aaa.owner='ADM' AND aaa.column_name='TTT' AND aaa.data_type = 'CHAR'; temp sql_n%ROWTYPE; begin open sql_n; loop FETCH sql_n INTO temp; exit when sql_n%NOTFOUND; ALTER TABLE temp.table_name MODIFY TTT varchar2(50); end loop; close sql_n; end;
Dlaczego nie mogę wykonać żadnego zapytania po exit when sql_n%NOTFOUND; ?
dostaję błąd, że spodziewał sie tam czegoś innego:
Error(18,5): PLS-00103: Napotkano symbol "ALTER" gdy oczekiwano jednego z następujących: ( begin case declare end exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge Symbol "lock zostało wstawione przed "ALTER" w celu kontynuacji.
Error(18,40): PLS-00103: Napotkano symbol "TTT" gdy oczekiwano jednego z następujących: , in
Edit:
dobra już sobie poradziłem, temat do zamknięcia
EXECUTE IMMEDIATE 'alter table adm.' || temp.table_name || ' modify TTT varchar2(50)';