oracle存储过程如何动态修改表名关联查询

想请问下各位,我现在有个表前面是以'sms_dx_demo_'开头的,每天的记录会根据每天的日期存放在一张表里,比如今天22号,就会放在sms_dx_demo_22表中,现在我这边有个存储过程,我需要每天跑一次,然后每天这个表名都会动态变化,请问横线表名部分怎么拼装,谢谢!
day varchar2(2); ------日期---- 短信表后缀select to_char(sysdate-1,'dd') into day from dual;

------ 统计xxxx成功量selectsum(sms.send_count) into sa_send_cnt from core_school sc
inner join sms_mt_send sms on sc.school_id = sms.school_id
inner join 'sms_mt_send_detail'||day detail on sms.mt_send_id = detail.mt_send_id
where sms.data_src in (1,2,3) and (detail.errorcode ='0'or detail.errorcode isnull) ;

第1个回答  推荐于2018-04-21
用动态sql拼接语句就好了!

VSQL varchar2(2000)
day varchar2(2);
begin
day:= to_char(sysdate-1,'dd');
VSQL:=' selectsum(sms.send_count) into sa_send_cnt from core_school sc
inner join sms_mt_send sms on sc.school_id = sms.school_id
inner join sms_mt_send_detail_'||day||' detail on sms.mt_send_id = detail.mt_send_id
where sms.data_src in (1,2,3) and (detail.errorcode ='0'or detail.errorcode isnull) ';
execute immdiate VSQL;

end本回答被提问者和网友采纳
第2个回答  2012-10-23
你前面说的和后面的SQL好像没有什么关联

oracle存储过程如何动态修改表名关联查询
用动态sql拼接语句就好了!VSQL varchar2(2000)day varchar2(2);begin day:= to_char(sysdate-1,'dd');VSQL:=' selectsum(sms.send_count) into sa_send_cnt from core_school sc inner join sms_mt_send sms on sc.school_id = sms.school_id inner join sms_mt_send_det...

oracle存储过程中查询动态表名
先建立结果表,也就是存放你最终结果的表 create table test(a varchar2(100),b varchar2(100));然后建立存储过程 create procedure p_insertascursor cur_tbname is select 'insert into test select col1,col2 from '||table_name from user_tables where table_name like 'AA___BB';--这...

Oracle存储过程中如何把表名写在变量里面进行查询该表?
create or replace procedure p_XX(tabName in varchar2) is type t_cursor is ref cursor;v_cursor t_cursor;v_SQLStatement varchar2(300);begin v_SQLStatement = 'select xx from '||tabName ;open v_cursor for v_SQLStatement;loop fetch v_cursor into XXX;exit when v_cur...

怎么查oracle存储过程更新记录
查oracle存储过程更新记录的方法是1、版本控制系统:如果你的存储过程是通过版本控制系统(如Git、SVN等)进行管理的,你可以通过版本控制系统的记录来查找存储过程的更新历史。版本控制系统会记录每次提交的变更,包括对存储过程的修改。2、数据库日志:Oracle数据库中的日志文件(如归档日志、重做日志)记录...

用oracle存储过程查一个表的内容,错哪了,怎么修改啊??create or replace...
REPLACE PROCEDURE CHAXUN(TEMPNAME IN VARCHAR) IS --is或者as TABLENAME VARCHAR;--声明变量BEGIN TABLENAME := TEMPNAME;--变量赋值,语句结束要加';' EXECUTE IMMEDIATE 'SELECT * FROM ' || TABLENAME; --动态执行END CHAXUN; 虽然改了这个存储过程,但是觉得这是没有任何意义的存储过程...

如何在oracle存储过程中执行动态sql语句
时需要在oracle 存储过程中执行动态SQL 语句 ,例如表名是动态的,或字段是动态的,或查询命令是动态的,可用下面的方法:set serveroutput ondeclaren number;sql_stmt varchar2(50);t varchar2(20);beginexecute immediate 'alter session set nls_date_format=''YYYYMMDD''';t := 't_' || ...

oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段_百度知 ...
需要实时变动用触发器 不实时变动用update update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b where a.id=b.id)---补充--- update a set a.name=(select b.name from b where a.id=b.id),a.adress=(select b.address from b wh...

oracle动态表名查询 如何写sql语句或者存储过程实现: 根据某张表中的某...
begin for cur in(select id,flag fromu a)loop if cur.flag=0 then select * from b;...else select * from C;...end if;end loop;end;

怎么样利用存储过程实现(oracle )的添加、删除、查询、修改啊?
---用存储过程查询id为1的学生姓名修改为赵六--- create or replace PROCEDURE P_UPDATE (v_id int,--定义要修改的id v_name varchar2)--定义要修改后的名字 is begin update student set name=v_name where id=v_id;--执行修改操作 commit;end;执行 BEGIN P_UPDATE(1,'赵六');END;然...

oracle PL\/sql 如果一张表的每行数据是另一个表的列名 怎么用存储过 ...
oracle动态游标举例:-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!CREATE OR REPLACE PROCEDURE xue_userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)IS sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句 BEGIN sqlstr := 'SELECT ...

相似回答