存储过程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 ;