解锁表
大纲UNLOCK [TABLE] tablename IN EXCLUSIVE MODE [IMMEDIATE]
UNLOCK [TABLE] tablename IN SHARE MODE [IMMEDIATE]
参数
-
tablename
- 要解锁的表的名称。
Tablename
必须是已经存在的表。表名可以是限定的(
schema.table
),也可以是非限定的(table
)。
非限定表名接受默认模式名。
模式搜索路径被忽略。
-
IN EXCLUSIVE MODE
/ IN SHARE MODE
- IN EXCLUSIVE MODE
关键字短语释放常规的IRIS锁。
IN SHARE MODE
关键字短语在IRIS级别释放共享锁。
UNLOCK
命令用来解锁被LOCK
命令锁定的SQL表。此表必须是已存在的表,您对其具有必要的特权。
如果
tablename
是临时表,则命令执行成功,但不执行任何操作。如果
tablename
是视图,则命令失败,并出现SQLCODE -400
错误。
UNLOCK
和UNLOCK TABLE
是同义词。
UNLOCK
命令用来反转LOCK
操作。即使没有锁被持有,
UNLOCK
命令也会成功完成。可以使用
LOCK
多次锁定一个表;
必须显式解锁表,解锁次数为表被显式锁定的次数。
权限
该命令为特权操作。
在使用UNLOCK IN SHARE MODE
之前,进程必须对指定的表拥有SELECT
权限。在使用
UNLOCK IN EXCLUSIVE MODE
之前,进程必须对指定的表具有INSERT
、UPDATE
或DELETE
权限。对于
IN EXCLUSIVE MODE, INSERT
或UPDATE
特权必须在表的至少一个字段上。未能持有足够的特权将导致
SQLCODE -99
错误(特权违反)。可以通过调用
%CHECKPRIV
命令来确定当前用户是否具有必要的特权。通过调用
$SYSTEM.SQL.Security.CheckPrivilege()
方法,可以确定指定的用户是否具有必要的表级特权。
Nonexistent Table
如果试图解锁一个不存在的表,则unlock
会失败,并出现编译错误,并且会出现SQLCODE=-30: table 'SQLUser. txt . txt
消息。
mytable”未找到。
下面的嵌入式SQL示例创建一个表,锁定它,然后解锁它:
ClassMethod Unlock()
{
n SQLCODE,%msg
&sql(
CREATE TABLE mytest (
ID NUMBER(12,0) NOT NULL,
CREATE_DATE DATE DEFAULT CURRENT_TIMESTAMP(2),
WORK_START DATE DEFAULT SYSDATE
)
)
if SQLCODE = 0 {
w !,"创建表"
} else {
w !,"CREATE TABLE error: ",SQLCODE
q
}
}
ClassMethod Unlock1()
{
n SQLCODE,%msg
&sql(
LOCK mytest IN EXCLUSIVE MODE
)
if SQLCODE =0 {
w !,"锁表"
} elseif SQLCODE = -110 {
w !,"表被另一个进程锁定",!,%msg
} else {
w !,"其他 LOCK error: ",SQLCODE,!,%msg
}
&sql(
UNLOCK mytest IN EXCLUSIVE MODE
)
if SQLCODE=0 {
w !,"解锁表"
} else {
w !,"其他 UNLOCK error: ",SQLCODE,!,%msg
}
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Unlock1()
锁表
解锁表