Melaksanakan Fungsi Tidur dalam ORACLE Tanpa DBMS_LOCK
Melambatkan pelaksanaan pertanyaan SQL dalam ORACLE mungkin timbul sebagai keperluan dalam senario tertentu. Walau bagaimanapun, bergantung pada fungsi DBMS_LOCK.sleep selalunya memerlukan pemberian keistimewaan kepada pengguna yang melaksanakan prosedur. Untuk memintas perkara ini, pendekatan alternatif boleh digunakan.
Fungsi yang disediakan, MYSCHEMA.TEST_SLEEP, menggunakan DBMS_LOCK.sleep untuk menjeda pelaksanaan selama beberapa saat tertentu. Walau bagaimanapun, ia memerlukan pemberian keistimewaan DBMS_LOCK kepada pemilik prosedur. Untuk mengelakkan ini, coretan kod berikut menawarkan kaedah alternatif:
CREATE OR REPLACE FUNCTION MYSCHEMA.ALTERNATIVE_SLEEP ( TIME_ IN NUMBER ) RETURN INTEGER IS IN_TIME INT; -- seconds to sleep v_now DATE; -- current date and time BEGIN SELECT SYSDATE -- Get the current date and time INTO v_now FROM DUAL; LOOP -- Sleep until the specified time has elapsed EXIT WHEN v_now + (IN_TIME * (1/86400)) <= SYSDATE; -- Break from the loop when the target time is reached END LOOP; RETURN 1; -- Dummy return value to avoid syntax errors EXCEPTION WHEN OTHERS THEN RAISE; RETURN 1; -- Dummy return value to avoid syntax errors END ALTERNATIVE_SLEEP;
Fungsi ini memanfaatkan gelung untuk mensimulasikan fungsi tidur tanpa menggunakan pakej DBMS_LOCK. Ia menyemak tarikh dan masa semasa secara berkala untuk menentukan sama ada tempoh tidur yang ditentukan telah berlalu. Apabila masa sasaran dicapai, gelung keluar. Pendekatan ini secara berkesan menjeda pelaksanaan prosedur untuk jumlah masa yang dikehendaki.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Tidur dalam Oracle Tanpa Keistimewaan DBMS_LOCK?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!