一个高手写的Sql

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->create table temp_127
(
  id 
number(10),
  dtime date
);



create or replace PROCEDURE UT_REDIRECTOR_COUNT(id in number)
IS
  s_table_name 
VARCHAR2(32);
  s_sql 
VARCHAR2(2000);
  t_count 
NUMBER;
  c_count 
NUMBER;
BEGIN
  
--根据组ID生成组资源表的表名
  s_table_name := 'EMAILS_' ||id;
  
--查询此表是否存在的SQL
  --s_sql := 'SELECT COUNT(*) FROM user_tables WHERE TABLE_NAME = ''' || s_table_name || '''';
  --EXECUTE IMMEDIATE s_sql INTO t_count;
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME = :t1'
    
into t_count USING s_table_name;
  
--如果表是否存在
  IF t_count = 1 THEN
    
--查询此表是否有此列
    --s_sql := 'SELECT COUNT(*) from USER_TAB_COLUMNS WHERE table_name=''' || s_table_name || ''' AND column_name = ''FIRST_NAME''';
    --dbms_output.put_line(s_sql);
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME=:t2 AND COLUMN_NAME = ''FIRST_NAME'''
       
into c_count USING s_table_name;
    
--EXECUTE IMMEDIATE s_sql INTO c_count;
    --dbms_output.put_line('存在表:' || s_table_name);
    IF c_count = 0 THEN
        s_sql :
= 'ALTER TABLE ' || s_table_name || ' ADD (REDIRECTOR_COUNT INT,FIRST_NAME VARCHAR2(256),LAST_NAME VARCHAR2(256),CONTENT_0 VARCHAR2(256),CONTENT_1 VARCHAR2(256),CONTENT_2 VARCHAR2(256))';
        
EXECUTE IMMEDIATE s_sql;
        
--dbms_output.put_line('没有字段:' || 'unsubscribe' || s_sql);
        s_sql := 'ALTER TABLE ' || s_table_name || ' MODIFY REDIRECTOR_COUNT DEFAULT 0';
        
EXECUTE IMMEDIATE s_sql;
        
COMMIT;
    
END IF;
  
END IF;
  
  exception
    
when others then
      
insert into temp_127(id,dtime)
        
values(id,sysdate);
      
commit;
END;

declare
  
cursor cur is
    
SELECT * 
      
FROM groups ORDER BY update_time desc;
  
  rec cur
%rowtype;
  progress_num 
varchar2(56);
  
begin
  
open cur;
  loop
    
fetch cur into rec;
    
exit when cur%notfound;
    
    UT_REDIRECTOR_COUNT(rec.id);
    
    progress_num:
= 'email_'||rec.id;
    
    dbms_application_info.set_client_info(progress_num);
  
end loop;
  
close cur;
end;

select client_info from v$session where client_info is not null;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值