如何删除所有表中的列

How to delete column in all tables

我使用的是 Firebird 2.5 我有多个列名为 'col1' 的表,我想将其删除。

我可以使用这个语句:

DELETE FROM RDB$RELATION_FIELDS
WHERE RDB$FIELD_NAME = 'col1';

但是不知道安全不安全

我尝试对多个执行语句使用执行块,但我不知道如何组合它。

SET TERM ^ ;
EXECUTE BLOCK AS
    DECLARE s AS VARCHAR(200)
BEGIN

WHILE (SELECT rf.RDB$RELATION_NAME FROM RDB$RELATION_FIELDS rf WHERE rf.RDB$FIELD_NAME = 'AKTYWNY';) DO
BEGIN
     ALTER TABLE :s DROP c1;
END

END^
SET TERM ; ^

这是如何在存储过程中执行此操作的示例:

create or alter procedure DELETE_COL (
    F_COL char(31))
as
declare variable V_STAT varchar(256);
declare variable R_NAME char(31);
begin
  for
  select f.rdb$relation_name
  from rdb$relation_fields f
  join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
  and r.rdb$view_blr is null
  and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
  where f.rdb$field_name = :f_col
  order by 1, f.rdb$field_position
  into
    :r_name  -- Table Name
  do
    begin
      v_stat = 'alter table ' || :r_name || ' drop ' || :f_col;
      execute statement(v_stat); /*because alter table ... is not allowed here */
    end
end

您也可以在 execute block 中使用它。