A. oracle怎么直接执行sql语句
Oracle可以使用SQL Plus进行执行,但是可视化不够,建议使用另外一个查询辅助工具PLSQL Developer,使用PLSQL Developer工具里面各种可视化都很好看出查询出数据的结果以及可以用这个工具分析SQL的执行分析。
你把脚本内容直接在存储过程中实现,然后利用job去定时调度就好了。
C. 我想定时让 oracle 执行一段sql语句 怎么做
如:定时删除三分钟前的数据
###1.创建存储过程
SQL>createorreplaceprocerepro_delete_aas
2begin
3deletefromatwheret.a<(sysdate-3/1440);###一天1440分钟。即一分钟是1/1440
4end;
5/
Procerecreated
###2创建job
SQL>variablejob_pro_delete_anumber;
SQL>begin
2dbms_job.submit(:job_pro_delete_a,'pro_delete_a;',sysdate,'sysdate+3/1440');
3end;
4/
PL/
job_pro_delete_a
---------
127
###3.调用job
SQL>begin
2dbms_job.run(:job_pro_delete_a);
3end;
4/
PL/
job_pro_delete_a
---------
127
###4.删除job
SQL>begin
2dbms_job.remove(:job_pro_delete_a);
3end;
4/
Ps:select*fromuser_jobs;
dbms_job.remove(ID);
D. oracle job 能否用sql语句控制时间
可以的!
参考如下代码
FOR P_JOB IN (SELECT *
FROM USER_JOBS
WHERE WHAT LIKE 'EXEC_PROCEDURE%;'
AND WHAT ! = 'EXEC_PROCEDURE_START;'
AND BROKEN = 'N') LOOP
BEGIN
DBMS_JOB.CHANGE(JOB => P_JOB.JOB,
WHAT => NULL,
NEXT_DATE => SYSDATE + P_TIME / 1440,
INTERVAL => NULL);
COMMIT;
END;
P_TIME := P_TIME + 1;
END LOOP;
E. oracle触发器中定时执行sql
关于Oracle 触发器中定时执行SQL 的问题, Oracle触 发器只是在表中数据被更新 如Insert,update,delete 等情况下才会触发,不能做到定时,只是能是有变化时才会执行!
要做到定时执行可使用Job 来完成
数据已经完成插入,建议插入数据时,直接使用触发器
例2:限制对Departments表修改(包括INSERT,DELETE,UPDATE)的时间范围,即不允许在非工作时间修改departments表。
CREATEORREPLACETRIGGERtr_dept_time
BEFOREINSERTORDELETEORUPDATE
ONdepartments
BEGIN
IF(TO_CHAR(sysdate,'DAY')IN('星期六','星期日'))OR(TO_CHAR(sysdate,'HH24:MI')NOTBETWEEN'08:30'AND'18:00')THEN
RAISE_APPLICATION_ERROR(-20001,'不是上班时间,不能修改departments表');
ENDIF;
END;
F. 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('调度名','调度属性','调度值');
至此,定时任务完成。
G. oracle创建job的脚本执行问题
在SQL*Plus中可以处理三种类型的命令:SQL语句、PL/SQL块和SQL*Plus命令。
但三者之间是有区别的。
脚本中的 “:job”是一种绑定变量的方式,属于sql plus的命令格式。需要写成如下格式,然后在plsql developer的命令窗口中执行,或者到sqlplus中执行。
var job number;
begin
sys.dbms_job.submit(job => :job,
what => 'ps_inventory_io;',
next_date => to_date('01-01-4000', 'dd-mm-yyyy'),
interval => 'trunc(sysdate)+1+0/24');
commit;
end;
/
1)SQL语句是以数据库为操作对象的语言,主要包括数据定义语言DDL、数据操纵语言DML和数据控制语言DCL以及数据存储语言DSL。当输入SQL语句后,SQL*Plus将其保存在内部缓冲区中。
当SQL命令输入完毕时,有三种方法可以结束SQL命令:在命令行的末尾输入分号(;)并按回车;在单独一行上用斜杠(/);或用空行表示。
2)PL/SQL块同样是以数据库中的数据为操作对象。但由于SQL不具备过程控制功能,所以,为了能够与其他语言一样具备面向过程的处理功能,在SQL中加入了诸如循环、选择等面向过程的处理功能,由此形成了PL/SQL。所有PL/SQL语句的解释均由PL/SQL引擎来完成。使用PL/SQL块可编写过程、触发器和包等数据库永久对象。
3)SQL*Plus命令主要用来格式化查询结果、设置选择、编辑及存储SQL命令、以设置查询结果的显示格式,并且可以设置环境选项。
H. oracle写一个定时执行的sql语句,JOB也行
关于定期执行的计划任务,oracle中可以通过dbms_scheler包中的自带的存储过程进行实现;如果需要将查询结果存入指定的目录,需要考虑数据转换,相对复杂,一般通过前端软件实现;
I. oracle中如何执行sql语句
如果用sqlplus,那么在你行的结尾要加分号(;),然后回车就行了。
例如:
select * from cat;