修改数据库的元数据

时间:2016-02-16 08:53:21

标签: database oracle metadata default-value

这很简单,我有一个包含许多表的数据库,我想要做的是为所有表示布尔值的字段(char(1字节))添加一个默认值。那么有没有办法(使用函数)编写一些逻辑,使用数据库的元数据及其表来添加该默认值,而无需在每个表中的每个字段上手动迭代?

希望这是明确的家伙:)。

1 个答案:

答案 0 :(得分:1)

使用下面给出的块来执行任务

DECLARE

LV_SQL VARCHAR2(4000);

  CURSOR C_GET_COLUMNS IS
    SELECT TABLE_NAME,COLUMN_NAME,NULLABLE,DATA_LENGTH,DATA_TYPE
      FROM USER_TAB_COLUMNS
     WHERE DATA_TYPE = 'CHAR'
       AND DATA_LENGTH = 1;

BEGIN

  FOR I IN C_GET_COLUMNS LOOP
      LV_SQL := 'ALTER TABLE '||I.TABLE_NAME||' MODIFY '||I.COLUMN_NAME||' '||I.DATA_TYPE||'('||I.DATA_LENGTH||') DEFAULT '||CHR(39)||'Y'||CHR(39);
      EXECUTE IMMEDIATE LV_SQL;
      LV_SQL := 'UPDATE '||I.TABLE_NAME||' SET '||I.COLUMN_NAME||' =  '||CHR(39)||'Y'||CHR(39)||' WHERE '||I.COLUMN_NAME||' IS NULL';
      DBMS_OUTPUT.PUT_LINE(LV_SQL);
      EXECUTE IMMEDIATE LV_SQL;
  END LOOP;

END;