存儲過程sleep
㈠ oracle中函數調用系統包沒許可權
同一個包,在相同的用戶下的匿名程序塊中可以執行,但是在存儲過程中卻沒有許可權執行,查了下資料,一些DBMS_開頭的pkg在pl/sql中用到的時候,需要顯示的執行
grant execute on dbms_xxxx to xxx 來賦下許可權才可以。此外這個授權system用戶是沒有許可權的,要sys 或者plsql / as dba登錄才有許可權授權。
授權以後可以看到:
SYSTEM@RACTEST> select grantee,owner,table_name,grantor,privilege from dba_tab_privs where table_name like 'DBMS_LOCK';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE
-------------------- ---------- ---------- ---------- ----------
EXECUTE_CATALOG_ROLE SYS DBMS_LOCK SYS EXECUTE
DMSYS SYS DBMS_LOCK SYS EXECUTE
CTXSYS SYS DBMS_LOCK SYS EXECUTE
EXFSYS SYS DBMS_LOCK SYS EXECUTE
MDSYS SYS DBMS_LOCK SYS EXECUTE
OLAPSYS SYS DBMS_LOCK SYS EXECUTE
SYSMAN SYS DBMS_LOCK SYS EXECUTE
ETL SYS DBMS_LOCK SYS EXECUTE
8 rows selected.
然後再次執行:
SYSTEM@RACTEST> CREATE OR REPLACE PROCEDURE etl.pliutest
2 authid current_user
3 AS
4 BEGIN
5 DBMS_LOCK.sleep(1);
6 END;
7 /
Procere created.
OK了!
㈡ Oracle資料庫存儲過程中要寫一個睡眠時間,怎麼實現
DBMS_LOCK.sleep (5);
沒有用過,你自己試
㈢ SQL中有沒有類似sleep的延時函數
SQL有定時執行的語句 WaitFor,可以寫到一個存儲過程中再執行一次
語法:WaitFor{Delay 'time'|Time 'time}
Delay後面的時間為延遲多少時間執行
Time後面的時間為指定何時執行,格式為"HH:MM:SS",不支持日期
例:
------指定10:00執行
Begin
waitfor time '10:00'
select * from tablename
end
-----指定等待1小時後執行
begin
waitfor delay '1:00'
select * from tablename
end
dbms_lock.sleep(n)暫停n秒後執行
一般這個包都會創建,但是許可權不是默認就賦予的;還有一個重要的步驟是要給用戶all on dbms_lock 許可權。。
在DBA身分下
grant execute on dbms_lock to USERNAME;
放到存貯過程里
1.WAITFOR
--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay '01:02:03'
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time '23:08:00'
select * from employee
㈣ 請教oracle pl/sql中延時語句的寫法
這個包的使用簡單研究了一下,是這樣:
名稱
類型
描述
ALLOCATE_UNIQUE
Procere
創建鎖(如果此鎖尚未建立)或者獲得鎖的標識符(如果此鎖已經建立).
REQUEST
Function
請求鎖.
CONVERT
Function
轉換鎖的狀態.
RELEASE
Function
釋放鎖.
SLEEP
Procere
讓一個存儲過程睡上指定的時間.
使用的大概方式是這樣的:
1
先用ALLOCATE_UNIQUE建立新鎖,並
㈤ Oracle 延時執行問題求指教:
使用dbms_lock.sleep(10);實現延時,本句子是等待10秒鍾,具體想等待的時間,你可以從表中查詢,再使用參數傳遞,即可實現。
㈥ Oracle 執行存儲過程,一直出錯,如下圖所示
創建包體的時候可能有問題,你把包體裡面的內容貼出來。
㈦ 存儲過程備份數據過程中sleep命令怎麼使用
1、(銀行)將經常要執行的sql語句寫成儲存過程,儲存在資料庫中,可以提高執行效率。
2、儲存過程的真正作用在於數據整合等復雜的業務操作。
3、在資料庫開發領域中,存儲過程是用作數據整合,數據介面,數據備份等操作。
㈧ SQL 存儲過程如何加鎖
create or replace procere testp is
LN number;
jcr_lockhandle varchar2(128);
begin
DBMS_LOCK.allocate_unique('Lock', jcr_lockhandle);--針對當前session加鎖
LOOP
LN := DBMS_LOCK.request ( jcr_lockhandle, TIMEOUT => 0);
IF LN NOT IN (0, 4)--判斷是否被別session鎖住
THEN
DBMS_OUTPUT.put_line ('Already run...');
DBMS_LOCK.sleep (2);--已經被人鎖住,休眠2秒
ELSE
EXIT;--沒有鎖,退出輪詢
END IF;
END LOOP;
dbms_output.put_line('1'); ----你要加鎖的業務邏輯哦
LN := DBMS_LOCK.release ( jcr_lockhandle);--釋放資源
end ;
㈨ 存儲過程的更新操作怎麼加鎖
create or replace procere testp is
LN number;
jcr_lockhandle varchar2(128);
begin
DBMS_LOCK.allocate_unique('Lock', jcr_lockhandle);--針對當前session加鎖
LOOP
LN := DBMS_LOCK.request ( jcr_lockhandle, TIMEOUT => 0);
IF LN NOT IN (0, 4)--判斷是否被別session鎖住
THEN
DBMS_OUTPUT.put_line ('Already run...');
DBMS_LOCK.sleep (2);--已經被人鎖住,休眠2秒
ELSE
EXIT;--沒有鎖,退出輪詢
END IF;
END LOOP;
dbms_output.put_line('1'); ----你要加鎖的業務邏輯哦
LN := DBMS_LOCK.release ( jcr_lockhandle);--釋放資源
end ;