И чтобы избежать ошибок, которые могут возникнуть, если у вас есть представления:
BEGIN
FOR X IN (SELECT C.TABLE_NAME,
C.COLUMN_NAME,
C.DATA_TYPE,
C.DATA_LENGTH
FROM USER_TAB_COLUMNS C
WHERE DATA_TYPE LIKE 'VARCHAR%'
AND CHAR_USED = 'B'
AND NOT EXISTS (SELECT 1 FROM USER_VIEWS V WHERE V.VIEW_NAME = C.TABLE_NAME))
LOOP
EXECUTE IMMEDIATE('ALTER TABLE '||X.TABLE_NAME||' MODIFY '||X.COLUMN_NAME||' '||X.DATA_TYPE||'('||X.DATA_LENGTH||' CHAR)');
END LOOP;
END;