❶ Oracle中如何定时执行一条sql语句
通过网上查询,找到一种方案,就是先在oracle里面对要定时的sql写成存储过程,再用DBMS_scheler对存储过程进行定时执行。
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在PLSQL中,执行下面语句模拟存储过程的调用,执行后要点提交才有反应
[sql] view plain
BEGIN
INSERTINTOMY_JOB_TEST(NUM)VALUES(1);
END;
GrantCreateJobTo指定用户名
SQL>CREATEORREPLACEPROCEDURE
JOB_TEST
BEGIN
INSERTINTOMY_JOB_TEST(NUM)VALUES(1);
END;
- (此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)
SQL>BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'SCHEDULER_TEST',
job_type=>'STORED_PROCEDURE',
job_action=>'JOB_TEST',
start_date=>sysdate,
repeat_interval=>'FREQ=MINUTELY;INTERVAL=1');
END;
- 但是这样子定时任务并不会执行。
SQL>SELECT*FROMUSER_SCHEDULER_JOBS;
- 此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务
SQL>BEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
然后下面建立一个存储过程JOB_TEST
(注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)
[sql] view plain
[sql] view plain
使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次
[sql] view plain
我们可以用下面的命令查看一下scheler的状态
[plain] view plain
[plain] view plain
dbms_scheler.enable('j_test'); --启用jobs
dbms_scheler.disable('j_test'); --禁用jobs
dbms_scheler.run_job('j_test'); --执行jobs
dbms_scheler.stop_job('j_test'); --停止jobs
dbms_scheler.drop_job('j_test'); --删除jobs
然后再查询job的enable装态,发现为true了。
然后查看MY_JOB_TEST表,发现每分钟会往里面添加记录。
当需要修改定时任务或者调度的其他属性时,可以用下面的
dbms_scheler.set_attribute('调度名','调度属性','调度值');
至此,定时任务完成。
❷ 如何提高sql语句的执行效率
1、使用ordered提示
Oracle必须花费大量的时间来剖析多表的合并,用以确定表合并的最佳顺序。SQL表达式涉及七个乃至更多的表合并,那么有时就会需要超过30分钟的时间来剖析,Ordered这个提示(hint)和其他的提示一起使用能够产生合适的合并顺序。
2、使用ordered_predicates
ordered_predicates提示在查询的WHERE子句里指定的,并被用来指定布尔判断(Booleanpredicate)被评估的顺序。在没有ordered_predicates的情况下,Oracle会使用下面这些步骤来评估SQL判断的顺序:子查询的评估先于外层WHERE子句里的Boolean条件。
所有没有内置函数或者子查询的布尔条件都按照其在WHERE子句里相反的顺序进行评估,即最后一条判断最先被评估。每个判断都带有内置函数的布尔判断都依据其预计的评估值按递增排列。
3、限制表格合并评估的数量
提高SQL剖析性能的最后一种方法是强制取代Oracle的一个参数,这个参数控制着在评估一个查询的时候,基于消耗的优化器所评估的可能合并数量。
(2)sql语句五分钟执行一次扩展阅读:
1、表设计的优化,数据行的长度不要超过8020字节,如果超过这个长度的话在物理页中这条数据会占用两行从而造成存储碎片,降低查询效率。
2、语句的查询优化,保证在实现功能的基础上,尽量减少对数据库的访问次数;
3、建立高效的索引创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。
大型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆结构存储数据,所有的数据均添加在表的尾部,而建立了簇索引的表,其数据在物理上会按照簇索引键的顺序存储。个表只允许有一个簇索引。
4、强制查询转换,有时候oracle 的优化器未必能走正确的查询路线,这个时候就需要添加一些hint 之类的来规定他的执行路线。当然了,这个未必是最好的处理方案。因为虽然现在走这个路线是对的,以为因为数据的变化到这这个HINT 变得不可取。
❸ 怎么样才能让sql数据库定期执行一句sql语句
create or replace procere MYPROCEDURE is
begin
UPDATE mac_vod SET vod_play_url= replace(vod_play_url, '第', '弟');
commit;
end MYPROCEDURE;
declare myjob number;
begin
DBMS_JOB.SUBMIT(
job => myjob,
what => 'myprocere;',
next_date => SYSDATE,
interval => 'sysdate+5/(24*60)');
commit;
end;
❹ 如何用plsql每隔5分钟自动执行一次存储过程
1,创建一个存储过程
bb
作用是往pig表中插入数据
sql>
create
or
replace
procere
job_pro_test
as
2
begin
3
insert
into
job_test
values(sysdate);
4
end;
5
/
procere
created
2,创建一个job,名称为job2010
;作用是每分钟(60×24=1440)执行一次存储过程job_pro_test。
sql>
variable
job2010
number;
sql>
begin
2
dbms_job.submit(:job2010,'job_pro_test;',sysdate,'sysdate+1/1440');
3
end;
4
/
❺ 如何让sql每天执行一下一个写好的sql语句
可以设置定时任务,比较常用的是用sqlserver 代理新建作业。有时候数据库自动备份也是用的这个。
还有一种比较复杂自己写个程序,使用系统定时任务 定时执行。
创建sql server定时任务作业步骤如下:
1.要先安装了sqlserver 代理服务
--2.鼠标右击【SQL Server 代理】,选择【启动(S)】,如已启动,可以省略此步骤;
--3.展开【SQL Server 代理】列表,右击【作业】--【新建作业】;
--3.1 在【常规】选项卡中:
-- 输入作业名称,如My Job;
--3.2 在【步骤】选项卡中:
--3.2.1 点击【新建】,输入【步骤名称】,如步骤1,类型默认T-SQL脚本,也可以选择SSIS包等;
--3.2.2 在【数据库】一栏选择要作业处理的数据库,在【命令】的右边空白编辑栏输入要执行的SQL代码,
EXEC p_Name --如:执行一个P_Name的存储过程
-- 也可以点击命令下面的【打开】,打开.sql脚本;
--3.2.3 输入运行脚本后,建议点击【分析】,确保脚本语法正确,然后点击下面的【确定】按钮;
--3.3 在【计划】选项卡中:
--3.3.1 点击【新建】,输入【计划名称】,如计划1,计划类型默认是重复执行,也可以选择执行一次等;
--3.3.2 在【频率】--【执行】处选择每天、每周或每月,以每天为例,间隔时间输入间隔几天执行一次,
-- 下面还可以选择每天一次性执行或间隔一定的时间重复执行
--3.3.3 在【持续时间】中选择计划开始执行的【起始日期】和【截止日期】,然后点击【确定】按钮;
--注意要将服务设置为自动启动,否则在重启服务器后作业就不运行了。
--启动代理服务的方法:
--开始--运行--输入services.msc--找到【SQL Server 代理】的服务并双击--【启动类型】选择自动--【确定】
--至此,定时作业已创建完毕。
❻ sql server如何每10秒执行一条SQL语句
可以用
waitfor delay '000:00:10'
把这个放在要执行的语句之前,这样过10秒钟才会执行语句,结合循环操作就可以每10秒执行一次了。
这个最好和语句同时放在存储过程中,执行完语句后,再调用存储过程就可以实现循环了。
用作业调度一次就可以了,把exec p_ZQJ_YX710_I_test加在存储过程最后,另外把while循环去掉,只要自己调用自己就可以了。另外最好设置一个配置表,在其中放置一个值用来确定是否要继续循环下去,如果不想让它循环下去,只要将那个配置值改一下。否则在重新启动SQL SERVER服务之前,这个存储过程会无限循环下去,一般是不好终止的。
create proc p_ZQJ_YX710_I_test
as
declare @d datetime
INSERT Runtime.dbo.history(TagName, QualityDetail, Value, DateTime)
SELECT rtrim(t1.name), 192,t1.curval,DATEADD(ss, t1.timestamp_high, '1970-01-01 08:00:00.000') AS Expr1
FROM scadasqltest.gzweb.dbo.analog t1 where t1.name ='ZQJ_YX710_I'
waitfor delay '00:00:10'--定义等待10秒
exec p_ZQJ_YX710_I_test
❼ postgresql sql 每隔5分钟去执行一条sql语句怎么写用存储过程吗
这个要使用postgresql定时任务,类似oracle中的job,SQL Server中的代理(agent)。
需要安装pgagent插件,然后建立job就定时执行了。具体要参考pgagent插件的使用。
❽ 如何随时执行一段SQL代码
能不能开放一个文本框,可以修改sql,然后将sql保存到数据库,再在软件上做个按钮查询数据库的这个sql,后执行?
❾ java中让Sql语句5秒钟执行一次
可以用定时器,spring中就有网络下Spring定时器,会有很多关于定时器的文章。如果不是用spring的,就自己写一个随项目启动的servlet或者filter,在init方法里直接写一个Timer