在Oracle中,可以使用`LOCK TABLE`語句來給表加鎖。加鎖可以防止其他會話對表進行修改,直到鎖被釋放。
加鎖的語法如下:
```
LOCK TABLE table_name IN lock_mode [WAIT integer] NOWAIT;
```
其中,`table_name`是要加鎖的表名,`lock_mode`是鎖模式,`WAIT`是可選的等待時間,`NOWAIT`表示不等待。
常用的鎖模式有以下幾種:
- `SHARE MODE`:共享模式,允許其他會話讀取表但不能修改。
- `ROW SHARE MODE`:行共享模式,允許其他會話讀取和修改表中的行,但不能修改整個表。
- `ROW EXCLUSIVE MODE`:行獨占模式,只允許一個會話讀取和修改表中的行。
- `SHARE UPDATE MODE`:共享更新模式,允許其他會話讀取表,但只允許一個會話修改表。
以下是一些示例:
- 加鎖并等待其他會話釋放鎖:
```sql
LOCK TABLE employees IN SHARE MODE WAIT 10;
```
這將給表`employees`加上共享鎖,并等待10秒鐘,如果鎖在這個時間內沒有被釋放,會話將等待鎖的釋放。
- 加鎖但不等待:
```sql
LOCK TABLE employees IN SHARE MODE NOWAIT;
```
這將給表`employees`加上共享鎖,如果鎖已經被其他會話占用,會立即返回錯誤信息。
- 加鎖并修改表:
```sql
LOCK TABLE employees IN ROW EXCLUSIVE MODE;
```
這將給表`employees`加上行獨占鎖,只允許當前會話讀取和修改表中的行。