alter table mytable delete('col' );
解决方案 »
- merge into 错误
- sql语句改写
- 关于oracle分区表交换分区主键失效的问题
- 触发器可以由UPDATE某个字段触发吗?
- Oracle 物化视图刷新 问题
- 特紧急一个问题,恢复UPDATE数据。
- oracle 有没有象SQL 中replicate函数
- 1000分征求oracle数据库对于海量数据的存储、查询解决方案
- 高分求一个SQL语句,急!不够再加!
- ***********Sql统计问题?求救**************
- PL/SQL 存储过程中动态查询语句问题? 在线、马上给分!!
- 那位大哥告诉一下PL/SQL developer5 正式版的下载地址(全的),和注册码! 100分
可以这样:
create or replace procedure P_sjzl is
vl_sql string(300);
begin
vl_sql:=alter table mytable delete('+col+');
execute immediate vl_sql;
commit;
end;
可以这样:
create or replace procedure P_sjzl is
vl_sql string(300);
begin
vl_sql:='alter table mytable delete('+'col'+')';
execute immediate vl_sql;
commit;
end;
写一个总的(包括sum(列)=0),不只是删除列的
cursor t_sor is
select COLUMN_NAME from user_tab_columns
where upper(TABLE_NAME)=upper('toparcelcollect') and DATA_TYPE='NUMBER' order by COLUMN_ID;
type p_sor is ref cursor;
v_sor p_sor;
str varchar2(50);
v_num number;
begin
for r_sor in t_sor loop
str:='select '||sum(r_sor.column_name)||' num from toparcelcollect';
open v_sor for str;
fetch v_sor into v_number;
dbms_output.put_line(v_number);
if v_number=0 then
alter table toparcelcollect drop column r_sor.column_name;
end if;
close v_sor;
end loop;
end;还没认真测试!自已试看吧。
请问帖主,为什么一定要删除列呢,这样做很不正规也不规范.
如果真的需要动态数据库表,不如将横表改为竖表,这样删除记录就等于删除列了.
execute immediate str;但执行此句先赋予权限。 grant alter any table to user_name;
beckhambobo(beckham) 的方法是可行的,谢谢
而且这样做也没有必要执行commit
beckhambobo(beckham) 的是不能放到存储过程中的