Oracle. Найти текстовые поля таблицы и поменять размерность.

Найти текстовые столбцы таблицы с размерностью BYTE, поменять размерность на CHAR и длину.

WITH COMMAND 
  AS (
    SELECT 'ALTER TABLE MY_TABLE MODIFY ('|| column_name ||' VARCHAR2(1000 CHAR));' C1
       FROM all_tab_columns
      WHERE table_name LIKE '%MV_%' 
        AND DATA_TYPE = 'VARCHAR2'
        AND OWNER = 'EXCHANGE'
        AND CHAR_USED = 'B'))
 SELECT C1 
   FROM COMMAND;

Получим текст операторов DDL, их выполнить в SQL*PLUS

Или PL/SQL: найти столбцы и выполнить операторы в динамическом SQL с EXECUTE IMMEDIATE

DECLARE

CURSOR C1
IS
(    SELECT owner, table_name, column_name, data_type, char_used
       FROM all_tab_columns
      WHERE table_name LIKE '%MV_%' 
        AND DATA_TYPE = 'VARCHAR2'
        AND OWNER = 'EXCHANGE'
        AND CHAR_USED = 'B');

C VARCHAR2(4000);

BEGIN
   DBMS_OUTPUT.ENABLE;
   DBMS_OUTPUT.ENABLE (buffer_size => null);

      FOR C IN C1
       LOOP 
          DBMS_OUTPUT.PUT_LINE('Command: EXECUTE IMMEDIATE' || 'ALTER TABLE ' || C.table_name || ' MODIFY '|| '(' || C.column_name || ' VARCHAR2(4000 CHAR)); ');
          EXECUTE IMMEDIATE 'ALTER TABLE ' || C.table_name || ' MODIFY ' || '(' || C.column_name || ' VARCHAR2(4000 CHAR))' ;
          DBMS_OUTPUT.PUT_LINE('Ok. Table ' || C.table_name || ' altered.');

       END LOOP;
END;
/

Close Menu