请教 关于Oracle存储过程的问题 存储过程要实现的功能是删除指定表内的所有数据;我写了很久都没写出来,第一次接触。我在外部给存储过程传入了一个字符串,例:a,b,c 那么存储过程就要删除a b c 三个表内的数据。以逗号为分割,具体该怎么写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这又不难,先分拆字符串,做循环,然后用动态sql删除 最佳方法:truncate a;truncate b;truncate c; create or replace procedure deletetable as begin execute immediate 'truncate table WRK_TRN_TNJK_INFO'; execute immediate 'truncate table WRK_HENKAN_WEB_BRD'; execute immediate 'truncate table WRK_HENKAN_WEB_BNRUI';end;上面是我以前自己写的 是可以正常使用的 现在要做的是优化下 因为上面的过程不够灵活 如果我想删除别的表,就需要修改过程 希望大家能给点建议! SQL> select * from a; IDX--------------------------------------- 1SQL> select * from b; IDX--------------------------------------- 2SQL> select * from c; IDX--------------------------------------- 3SQL> SQL> create or replace procedure tdrop(v_in nvarchar2) 2 is 3 tblname nvarchar2(30); 4 s nvarchar2(30); 5 ssql varchar2(1000); 6 begin 7 s := v_in; 8 while instr(s,',') > 0 9 loop 10 tblname := substr(s,1,instr(s,',')-1); 11 s := substr(s,instr(s,',')+1,length(s)-instr(s,',')); 12 ssql := 'delete from '||tblname; 13 execute immediate ssql; 14 end loop; 15 ssql := ' delete from '||s; 16 execute immediate ssql; 17 end; 18 /Procedure createdSQL> exec tdrop('a,b,c');PL/SQL procedure successfully completedSQL> select * from a; IDX---------------------------------------SQL> select * from b; IDX---------------------------------------SQL> select * from c; IDX---------------------------------------SQL> 问一个看似简单,但问了N多人都写不出来的SQL语句 关于数据表之间的数据互导 pro*c编译出错 oracle正在初始化或在关闭,请稍后再试。 逗号分隔字段取前三项 你敢挑战嘛? 怎么用一条SQL语句算出平均分来呢 select语句如何来写 这个SQL语句查询起来为什么这么慢? 如何进行这样的恢复操作,提供手段即可 Oracle 的高手们 强烈解决一下数据库还原的问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 存储过程的变量问题(急)
truncate a;
truncate b;
truncate c;
begin
execute immediate 'truncate table WRK_TRN_TNJK_INFO';
execute immediate 'truncate table WRK_HENKAN_WEB_BRD';
execute immediate 'truncate table WRK_HENKAN_WEB_BNRUI';
end;上面是我以前自己写的 是可以正常使用的 现在要做的是优化下 因为上面的过程不够灵活 如果我想删除别的表,就需要修改过程 希望大家能给点建议!
SQL> select * from a; IDX
---------------------------------------
1SQL> select * from b; IDX
---------------------------------------
2SQL> select * from c; IDX
---------------------------------------
3SQL>
SQL> create or replace procedure tdrop(v_in nvarchar2)
2 is
3 tblname nvarchar2(30);
4 s nvarchar2(30);
5 ssql varchar2(1000);
6 begin
7 s := v_in;
8 while instr(s,',') > 0
9 loop
10 tblname := substr(s,1,instr(s,',')-1);
11 s := substr(s,instr(s,',')+1,length(s)-instr(s,','));
12 ssql := 'delete from '||tblname;
13 execute immediate ssql;
14 end loop;
15 ssql := ' delete from '||s;
16 execute immediate ssql;
17 end;
18 /Procedure createdSQL> exec tdrop('a,b,c');PL/SQL procedure successfully completedSQL> select * from a; IDX
---------------------------------------SQL> select * from b; IDX
---------------------------------------SQL> select * from c; IDX
---------------------------------------SQL>