Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencapai Fungsi Tidur dalam Oracle Tanpa Kebenaran DBMS_LOCK.sleep?

Bagaimanakah Saya Boleh Mencapai Fungsi Tidur dalam Oracle Tanpa Kebenaran DBMS_LOCK.sleep?

Patricia Arquette
Lepaskan: 2024-12-24 20:35:10
asal
771 orang telah melayarinya

How Can I Achieve a Sleep Function in Oracle Without DBMS_LOCK.sleep Permissions?

Fungsi Tidur dalam Oracle: Alternatif kepada DBMS_LOCK.sleep

Dalam Oracle, fungsi DBMS_LOCK.sleep biasanya digunakan untuk menjeda pelaksanaan untuk sesuatu tempoh yang ditetapkan. Walau bagaimanapun, fungsi ini memerlukan kebenaran khusus, yang mungkin tidak diberikan kepada semua pengguna.

Masalah

Coretan kod yang dibentangkan menunjukkan fungsi (TEST_SLEEP) yang menggunakan DBMS_LOCK. tidur untuk menjeda pelaksanaan selama beberapa saat tertentu. Walau bagaimanapun, fungsi tersebut memerlukan pemilik prosedur untuk diberikan akses kepada DBMS_LOCK.

Penyelesaian

Tanpa menggunakan DBMS_LOCK.sleep, terdapat kaedah alternatif untuk mencapai yang serupa kesan:

1. Bergelung dengan Cap Masa Semasa

Pendekatan ini menggunakan gelung untuk menyemak cap masa semasa berulang kali sehingga jumlah masa yang dikehendaki telah berlalu:

CREATE OR REPLACE FUNCTION MYSCHEMA.MY_SLEEP
(
  IN_TIME IN NUMBER
)
RETURN INTEGER IS
BEGIN
  v_now DATE;    -- Current timestamp
  IN_TIME := IN_TIME * (1/86400);  -- Convert to fractional day
  
  SELECT SYSDATE INTO v_now FROM DUAL;
  
  LOOP
    EXIT WHEN v_now + IN_TIME <= SYSDATE;
    -- Check again after 1 millisecond
    DBMS_LOCK.SLEEP(1000000 / 86400000);
  END LOOP;
  
  RETURN 1;
END MY_SLEEP;
Salin selepas log masuk

Fungsi ini bergelung sehingga perbezaan antara cap masa semasa dan cap masa awal (ditambah masa tidur yang ditentukan) menjadi kurang daripada atau sama dengan 0. Kelewatan masa diperkenalkan menggunakan DBMS_LOCK.SLEEP dengan kenaikan kecil (1 mikrosaat) untuk mengelak daripada membebankan sistem.

Nota:

Walaupun kaedah ini tidak memerlukan kebenaran DBMS_LOCK.sleep, ia mungkin tidak setepat atau cekap seperti DBMS_LOCK.sleep dalam keadaan tertentu senario.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Fungsi Tidur dalam Oracle Tanpa Kebenaran DBMS_LOCK.sleep?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan