Eu gostaria de fazer algo como
select tc.owner, tc.table_name, tc.column_name, tc.data_type, tc.data_length
from all_tab_cols tc
inner join all_tables t on tc.owner = t.owner and tc.table_name = t.table_name
where tc.owner = 'LEMANS'
AND tc.data_type LIKE '%VARCHAR%'
ALTER TABLE tc.table_name MODIFY tc.column_name VARCHAR2(tc.data_length CHAR);
Como posso fazer isso funcionar? Quero alterar a tabela em todas as linhas selecionadas.
Isso não pode ser feito em uma única instrução SQL. Você precisa executar um comando select, usar os resultados para gerar uma instrução SQL e, em seguida, executá-la. O mais fácil é fazer isso em um bloco pl/sql, algo assim:
notas:
CHAR_USED
para que apenas as colunas com BYTE sejam modificadas. Não é necessário modificar uma coluna que já tenha CHAR.EXECUTE IMMEDIATE...
linha para verificar se o script funciona corretamente. Quando tudo estiver correto, descomente-a.