如下,我想给所有的字段都去除空格,写了个过程,update的语句那里报错,希望指点;并且感觉自己的方法很笨,请问还有其它更简洁的方法么。declare
cursor trim_cursor is
select column_name from user_tab_columns where table_name = 'YONGHU';
trim_col user_tab_columns.COLUMN_NAME%type;
begin
open trim_cursor;
loop
fetch trim_cursor
into trim_col;
EXIT WHEN trim_cursor%NOTFOUND;
update yonghu set trim_col = trim(trim_col);
end loop;
close trim_cursor;
end;
cursor trim_cursor is
select column_name from user_tab_columns where table_name = 'YONGHU';
trim_col user_tab_columns.COLUMN_NAME%type;
begin
open trim_cursor;
loop
fetch trim_cursor
into trim_col;
EXIT WHEN trim_cursor%NOTFOUND;
update yonghu set trim_col = trim(trim_col);
end loop;
close trim_cursor;
end;
于是想游标出来每一个字段名,然后update,
不知道这样是为什么出差;而且有没有更好的方法。
查询的时候再进行TRIM就可以了,
这个应该从你的源头进行控制吧,
不是用update语句吧?ALTER TABLE TB RENAME COLUMN A TO B通过动态语句来处理
要保证执行的用户有访问user_tab_columns这个表的权限。
已经验证,是可行的,楼主结贴给分吧。declare
cursor trim_cursor is
select column_name from user_tab_columns where table_name = 'YONGHU';
trim_col user_tab_columns.COLUMN_NAME%type;
v_str varchar2(200);
begin
open trim_cursor;
loop
fetch trim_cursor
into trim_col;
EXIT WHEN trim_cursor%NOTFOUND;
v_str:='update YONGHU set '|| trim_col || '= trim(' ||trim_col ||')';
execute immediate v_str;
--update yonghu set trim_col = trim(trim_col);
end loop;
close trim_cursor;
end;
select * from user_tab_columns where table_name = 'SOP' and data_type like '%CHAR%';
那我是不是用户replace(col,' ','')就能达到我的目的,也不会出现你说的情况了呢?
我这样批量处理是因为数据全都是由excel贴进来的, 所以前后有好多空格什么的。
just do it;
------------------- ------------------- --------
2011-09-12 21:34:36 2011-09-12 21:34:36 1213.123
v_str:='update YONGHU set '|| trim_col || '= trim(' ||trim_col ||')';
execute immediate v_str;
--update yonghu set trim_col = trim(trim_col);另外,我不是很明白,为什么我的语句不能执行呢?
update yonghu set trim_col = trim(trim_col);数据库并不会知道你想要的是变量trim_col的值,他会把他当成数据库字段处理,就是当成名字叫
trim_col的字段。初学者常犯的错误,仔细想想,不要把数据库当成智能的不得了,你扔一个变量在这里,不特殊写一下它是不会知道你是想要的是这个里面的值的。
谢谢 完全明白了 和程序的变量一样 写sql的时候却突然这样异想天开了