当前位置:首页 » 编程语言 » oraclejobsql

oraclejobsql

发布时间: 2023-01-20 16:05:50

① oracle写一个定时执行的sql语句,JOB也行

关于定期执行的计划任务,oracle中可以通过dbms_scheler包中的自带的存储过程进行实现;如果需要将查询结果存入指定的目录,需要考虑数据转换,相对复杂,一般通过前端软件实现;

② Oracle数据库job,调用存储过程,PLSQL工具执行后,没有报错,但是也没有任何效果,哪位大神帮忙分析一下

SQL> create or replace procere test_jobproce as
2
3 begin
4
5 insert into test_job values(sysdate);
6
7 end test_jobproce;
8
9 /

警告: 创建的过程带有编译错误。

SQL> show errors;
PROCEDURE TEST_JOBPROCE 出现错误:

LINE/COL ERROR
-------- -----------------------------------------------------------------
5/1 PL/SQL: SQL Statement ignored
5/13 PL/SQL: ORA-00942: 表或视图不存在
SQL> create table test_job (t1 date);

表已创建。

SQL> create or replace procere test_jobproce as
2
3 begin
4
5 insert into test_job values(sysdate);
6
7 end test_jobproce;
8 /

过程已创建。

SQL> declare test_job_really number;
2 begin
3 dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/1440')

4 commit;
5 end;
6 /

PL/SQL 过程已成功完成。

SQL> rpitn :test_job_really;
SP2-0734: 未知的命令开头 "rpitn :tes..." - 忽略了剩余的行。
SQL> print :test_job_really;
SP2-0552: 未声明绑定变量 "TEST_JOB_REALLY"。
SQL> desc dba_jobs;
名称 是否为空? 类型
----------------------------------------- -------- ---------------------------

JOB NOT NULL NUMBER
LOG_USER NOT NULL VARCHAR2(30)
PRIV_USER NOT NULL VARCHAR2(30)
SCHEMA_USER NOT NULL VARCHAR2(30)
LAST_DATE DATE
LAST_SEC VARCHAR2(8)
THIS_DATE DATE
THIS_SEC VARCHAR2(8)
NEXT_DATE NOT NULL DATE
NEXT_SEC VARCHAR2(8)
TOTAL_TIME NUMBER
BROKEN VARCHAR2(1)
INTERVAL NOT NULL VARCHAR2(200)
FAILURES NUMBER
WHAT VARCHAR2(4000)
NLS_ENV VARCHAR2(4000)
MISC_ENV RAW(32)
INSTANCE NUMBER

SQL> select job ,what from dba_jobs;

JOB
----------
WHAT
-------------------------------------------------------------------------------

4001
wwv_flow_cache.purge_sessions(p_purge_sess_older_then_hrs => 24);

4002
wwv_flow_mail.push_queue(wwv_flow_platform.get_preference('SMTP_HOST_ADDRESS'),

wv_flow_platform.get_preference('SMTP_HOST_PORT'));

3
test_jobproce;

JOB
----------
WHAT
-------------------------------------------------------------------------------

SQL> exec dbms_job.run(3);

PL/SQL 过程已成功完成。

SQL> select * from test_job
2 ;

T1
--------------
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14

SQL> exec dbms_job.run(3);

PL/SQL 过程已成功完成。

SQL> /

T1
--------------
05-3月 -14
05-3月 -14
05-3月 -14

SQL> /

T1
--------------
05-3月 -14
05-3月 -14
05-3月 -14

SQL> exec dbms_job.run(3);

PL/SQL 过程已成功完成。

SQL> /

T1
--------------
05-3月 -14
05-3月 -14
05-3月 -14
05-3月 -14

SQL>

③ 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;


  • 然后下面建立一个存储过程JOB_TEST

    (注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)

    [sql] view plain

  • GrantCreateJobTo指定用户名



  • [sql] view plain

  • SQL>CREATEORREPLACEPROCEDURE

  • JOB_TEST

  • BEGIN

  • INSERTINTOMY_JOB_TEST(NUM)VALUES(1);

  • END;


  • (此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)
  • 使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次

    [sql] view plain

  • 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;


  • 但是这样子定时任务并不会执行。
  • 我们可以用下面的命令查看一下scheler的状态

    [plain] view plain

  • SQL>SELECT*FROMUSER_SCHEDULER_JOBS;

  • 此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务
  • [plain] view plain

  • SQL>BEGIN

  • DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');


  • 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('调度名','调度属性','调度值');



  • 至此,定时任务完成。

④ 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;

⑤ oracle如何查询和停止正在运行的job

找出正在执行的JOB编号及其会话编号 SELECT SID,JOB FROM DBA_JOBS_RUNNING; 停止该JOB的执行 SELECT SID,SERIAL# FROM V$SESSION WHERE SID='&SID' ALTER SYSTEM KILL SESSION '&SID,&SERIAL' EXEC DBMS_JOB.BROKEN(&JOB,TRUE);实例分析:1,查询正在运行的Job,通过查询有两个,和进程占用较多的是两个ORACLE进程符合。SQL> SELECT SID,JOB FROM DBA_JOBS_RUNNING; SID JOBx0dx0a---------- ----------12 11616 1172,查询正在运行的job的信息SQL> SELECT SID,SERIAL# FROM V$SESSION WHERE SID=཈' SID SERIAL#x0dx0a---------- ----------x0dx0a12 4SQL> SELECT SID,SERIAL# FROM V$SESSION WHERE SID=ཌ' SID SERIAL#x0dx0a---------- ----------x0dx0a16 13,利用查询出来的job信息将job结束掉SQL> ALTER SYSTEM KILL SESSION ཈,4'System altered.SQL> ALTER SYSTEM KILL SESSION ཌ,1'System altered.x0dx0a4,如果不希望运行上述job的话,可以将job设置为broken.EXEC DBMS_JOB.BROKEN(116,TRUE);EXEC DBMS_JOB.BROKEN(117,TRUE);

⑥ 我想定时让 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);

⑦ oracle job 时间每五分钟执行怎么写

oracle job 时间每五分钟执行:

begin

sys.dbms_job.submit(job => :job,

what => '一个存储过程;',

Interval =>TRUNC(sysdate,'mi') + 5/ (24*60));

commit;

end;

其中:如果改成TRUNC(sysdate,'mi')+ 10/ (24*60) 就是每10分钟执行次。每秒钟执行次:Interval => sysdate+ 1/(24 * 60 * 60)。如果改成sysdate + 10/(24 *60 * 60)就是10秒钟执行次。

使用dbms_job.submit方法过程,这个过程有五个参数:job、what、next_date、interval与no_parse:

1、job参数是输出参数,由submit()过程返回的binary_ineger,这个值用来唯一标识一个工作。一般定义一个变量接收,可以去user_jobs视图查询job值。

2、what参数是将被执行的PL/SQL代码块,存储过程名称等。

3、next_date参数指识何时将运行这个工作。

4、interval参数何时这个工作将被重执行。

5、no_parse参数指示此工作在提交时或执行时是否应进行语法分析——true,默认值false。指示此PL/SQL代码在它第一次执行时应进行语法分析,而FALSE指示本PL/SQL代码应立即进行语法分析。

(7)oraclejobsql扩展阅读:

1、每天定时执行

例如:每天的凌晨1点执行

Interval =>TRUNC(sysdate) + 1 +1/ (24)

2、每周定时执行

例如:每周一凌晨1点执行:

Interval =>TRUNC(next_day(sysdate,'星期一'))+1/24

3、每月定时执行

例如:每月1日凌晨1点执行:

Interval=>TRUNC(LAST_DAY(SYSDATE))+1+1/24

4、每季度定时执行

例如每季度的第一天凌晨1点执行:

Interval =>TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24

热点内容
安卓系统下载铃声在哪个文件夹 发布:2025-07-18 12:52:11 浏览:271
qt程序一样但是无法编译 发布:2025-07-18 12:32:45 浏览:36
服务器搭建主机配置 发布:2025-07-18 12:12:43 浏览:126
ftp命令批量下载文件 发布:2025-07-18 11:58:45 浏览:744
nba2k17文件夹 发布:2025-07-18 11:48:53 浏览:871
朔源码是什么 发布:2025-07-18 11:44:33 浏览:775
迷你世界解压剧场 发布:2025-07-18 11:43:48 浏览:155
linux安装opencv 发布:2025-07-18 11:42:10 浏览:447
编程游戏的软件有哪些 发布:2025-07-18 11:41:34 浏览:957
c程序设计语言电子书 发布:2025-07-18 11:35:58 浏览:643