数据库判断是否存在某个字段,若不存在,则增加该字段。若存在,则不处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CoderTnT/article/details/88397890

Oracle:

declare
i integer;
begin
select count(*) into i from user_tab_columns 
where table_name=upper('表名')
   and column_name=upper('字段名');
 if i=0 then
 execute immediate 'alter table 表名 add 字段名 VARCHAR2(64)';
 end if;
end;
 

Mysql:

1、新建存储过程:

drop procedure if exists AddColumnUnlessExists;
create procedure AddColumnUnlessExists(
    IN dbName tinytext,
    IN tableName tinytext,
    IN fieldName tinytext,
    IN fieldDef text)
begin
    IF NOT EXISTS (
        SELECT * FROM information_schema.COLUMNS
        WHERE column_name=fieldName
        and table_name=tableName
        and table_schema=dbName
        )
    THEN
        set @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName,
            ' ADD COLUMN ',fieldName,' ',fieldDef);
        prepare stmt from @ddl;
        execute stmt;
    END IF;
end;

2、执行存储过程:

call AddColumnUnlessExists(Database(), 'sys_install_sql', 'subsyscode', 'varchar(64)');

3、删除存储过程:

drop procedure AddColumnUnlessExists;

---------

Mysql官方文档:

Add a Column to a table if not exists


MySQL allows you to create a table if it does not exist, but does not provide a native way of a adding a column (i.e. a field) to an existing table with a test of whether the column already exists - so as to avoid an error if the column already exists. The ability to add a column if it does not exist can be useful for upgrade scripts and the like.

The following script creates a stored procedure that allows a column to be added to a table but only if it does not already exist:

drop procedure if exists AddColumnUnlessExists;
create procedure AddColumnUnlessExists(
    IN dbName tinytext,
    IN tableName tinytext,
    IN fieldName tinytext,
    IN fieldDef text)
begin
    IF NOT EXISTS (
        SELECT * FROM information_schema.COLUMNS
        WHERE column_name=fieldName
        and table_name=tableName
        and table_schema=dbName
        )
    THEN
        set @ddl=CONCAT('ALTER TABLE ',dbName,'.',tableName,
            ' ADD COLUMN ',fieldName,' ',fieldDef);
        prepare stmt from @ddl;
        execute stmt;
    END IF;
end;

This stored procedure provides the functionality for "add column if not exists". To use the script call it with the name of the database, name of the table, name of the field and the field definition to use if the field is to be created. For example:

call AddColumnUnlessExists(Database(), 'accounts', 'dob', 'varchar(32) null');

which will add the field "dob" to the table "accounts" in the current database, unless it already exists, or

call AddColumnUnlessExists('GIS', 'boundaries', 'fillColour', 'int unsigned not null default 1');

which will add the field "fillColour" to the table "boundaries" in the database "GIS" if it does not already exist.

If you want to drop the stored procedure after use then use:

drop procedure AddColumnUnlessExists;

猜你喜欢

转载自blog.csdn.net/CoderTnT/article/details/88397890