Witam,

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:

  1. CREATE OR REPLACE procedure to_varchar2 IS
  2.  
  3. cursor sql_n IS
  4. SELECT DISTINCT aaa.table_name
  5. FROM sys.all_tab_cols aaa
  6. WHERE aaa.owner='ADM'
  7. AND aaa.column_name='TTT'
  8. AND aaa.data_type = 'CHAR';
  9.  
  10. temp sql_n%ROWTYPE;
  11.  
  12. begin
  13. open sql_n;
  14. loop
  15. FETCH sql_n INTO temp;
  16. exit when sql_n%NOTFOUND;
  17. ALTER TABLE temp.table_name MODIFY TTT varchar2(50);
  18.  
  19. end loop;
  20. close sql_n;
  21. 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

  1. EXECUTE IMMEDIATE 'alter table adm.' || temp.table_name || ' modify TTT varchar2(50)';