當前位置:首頁 » 編程語言 » 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

熱點內容
nba2k17文件夾 發布:2025-07-18 11:48:53 瀏覽:869
朔源碼是什麼 發布:2025-07-18 11:44:33 瀏覽:773
迷你世界解壓劇場 發布:2025-07-18 11:43:48 瀏覽:153
linux安裝opencv 發布:2025-07-18 11:42:10 瀏覽:445
編程游戲的軟體有哪些 發布:2025-07-18 11:41:34 瀏覽:955
c程序設計語言電子書 發布:2025-07-18 11:35:58 瀏覽:641
lightning耳機如何在安卓手機上用 發布:2025-07-18 11:21:47 瀏覽:174
妄想山海新宿怎麼配置好 發布:2025-07-18 11:07:43 瀏覽:615
androidsaxxml解析xml 發布:2025-07-18 10:57:58 瀏覽:386
ios透明文件夾插件 發布:2025-07-18 10:51:36 瀏覽:842