--declare在oracle中指代的是“块”,用于处理一段业务逻辑的
--declare
--动态表表名前缀
tbl_name_prefix nvarchar2(255);
--表名
tbl_name nvarchar2(255);
--字段
add_column_name nvarchar2(255) := 'code_ssqx';
--存放sql语句的字符串
sql_str nvarchar2(500);
--字段是否已存在
is_exist number := 0;
c_name number;
ret number;
--记录动态表的的数量
mt_counter number := 0;
begin
for tbl_name_record in (select table_name
from USER_TABLES
where table_name like 'ZHZS_%') loop
mt_counter := mt_counter + 1;
dbms_output.put_line('tbl_name: ' || tbl_name_record.table_name);
-- oracle cols 查询表字段类型及长度 function
select count(column_name)
into is_exist
from cols
where table_name = upper(tbl_name_record.table_name)
and column_name = upper(add_column_name);
if (is_exist = 0) then
dbms_output.put_line('字段 [' || add_column_name || '] 在表' ||
tbl_name_record.table_name || '中不存在');
sql_str := 'alter table ' || tbl_name_record.table_name || ' add ' ||
add_column_name || ' varchar2(50) ';
dbms_output.put_line('添加列,动态执行DDL语句: ' || sql_str);
---动态执行DDL语句
--execute immediate sql_str;
c_name := dbms_sql.open_cursor;
dbms_sql.parse(c_name,sql_str,dbms_sql.native);
ret := dbms_sql.execute(c_name);
dbms_sql.close_cursor(c_name);
else
dbms_output.put_line('字段 [' || add_column_name || '] 已经存在于表' ||
tbl_name_record.table_name || '中');
end if;
end loop;
dbms_output.put_line('共有: [' || mt_counter || '] 个动态表。');
end add_column;
删除字段类似操作
原文链接:https://www.f2er.com/oracle/210325.html