姓名去空格:编写对eaa1表姓名aac003去空格过程 sp_xmqkg0(空格包括左边,右边以及姓名中间),并把更新人员信息保存到备份表tb_xmqkg0_bak中(字段为:个人档案号,原来姓名,现在姓名) 要求:备份表更新由过程中更新。
我刚接触ORACLE,就试着写了一个,帮我看看有什么问题没?还有pl/sql中存储过程怎么调用,说具体点,谢谢
create or replace procedure sp_xmqkg0
is 
sql1 varchar2(2000);
sql2 varchar2(2000);
sql3 varchar2(2000);
cursor c_tb_xmqkg0_bak
is 
select ced001 档案编号,aac003 原来姓名,现在姓名 from(select replace(aac003,' ','') 现在姓名 from eaa1),eaa1
begin
 sql1 :='drop table tb_xmqkg0_bak';
 execute immediate sql1;
 sql2 :='create table tb_xmqkg0_bak(个人档案号 varchar2(14) not null,原来姓名 varchar2(20),现在姓名 varchar2(20)';
 execute immediate sql2;
for r in c_tb_xmqkg0_bak 
loop
insert into tb_xmqkg0_bak VALUES(r.档案编号,r.原来姓名,r.现在姓名);
end loop;
commit;
sql3:='update eaa1 set aac003=replace(aac003,' ','')';
exception
when others then
rollback;
end sp_xmqkg0;

解决方案 »

  1.   


      代码格式不好看,最好还是写成SQL代码。像这样的。
      过程不看了,不过建议不要把字段名写成中文,会出问题的。
      调用存储过程如下:
       begin
        sp_xmqkg0;
       end;
      

  2.   

    这样调用就可以
    DECLARE
    BEGIN
      sp_xmqkg();
    END你的程序自己调下,出了问题可以贴出来,加油
      

  3.   


    create or replace procedure sp_xmqkg0
    is 
    sql1 varchar2(2000);
    sql2 varchar2(2000);
    sql3 varchar2(2000);
    cursor c_tb_xmqkg0_bak
    is 
    select ced001 档案编号,aac003 原来姓名,现在姓名 from(select replace(aac003,' ','') 现在姓名 from t1),t1begin
     
     sql1 :='drop table tb_xmqkg0_bak';
     execute immediate sql1;
     sql2 :='create table tb_xmqkg0_bak(个人档案号 varchar2(14) not null,原来姓名 varchar2(20),现在姓名 varchar2(20))';
     execute immediate sql2;for r in c_tb_xmqkg0_bak 
    loop
    insert into tb_xmqkg0_bak VALUES(r.档案编号,r.原来姓名,r.现在姓名);
    end loop;
     sql3:='update eaa1 set aac003=replace(aac003,' ','')';
    commit;exception
    when others then
    rollback;
    end sp_xmqkg0;