Change all datatypes in a table I'm migrating a database and i need to change the "container", i don't exactly how to name it. I give an example to keep it clear :

old base:

VARCHAR2(20 BYTE)


new base:

VARCHAR2(20 CHAR)


I can do it individually with alter...modify query but it takes so much time to prepare the queries cause the tables have a hundred or more columns. Is there any scripting way or a query that changes all the byte containers with char ?
You can use a bit of dynamic SQL.  Assuming that you want to modify every VARCHAR2 column in one table

DECLARE
  l_sql_stmt varchar2(1000);
BEGIN
  FOR c IN (SELECT *
              FROM user_tab_columns
             WHERE data_type = 'VARCHAR2'
               AND table_name = &lt;&lt;table name&gt;&gt;
               AND char_used = 'B')
  LOOP
    l_sql_stmt := 
       'ALTER TABLE &lt;&lt;table name&gt;&gt; MODIFY( ' || 
          c.column_name || ' VARCHAR2( ' || c.char_length || ' CHAR) )';
    EXECUTE IMMEDIATE l_sql_stmt;
  END LOOP;
END;