Oracle 39112是一種錯(cuò)誤代碼,在Oracle數(shù)據(jù)庫(kù)操作中比較常見(jiàn)。該錯(cuò)誤提示信息通常出現(xiàn)在執(zhí)行Oracle數(shù)據(jù)庫(kù)語(yǔ)句時(shí),表示無(wú)法執(zhí)行該語(yǔ)句,因?yàn)闆](méi)有找到當(dāng)前用戶對(duì)應(yīng)的SCHEMA。
舉個(gè)例子,假設(shè)我們有一個(gè)名為"USER01"的數(shù)據(jù)庫(kù)用戶,但該用戶沒(méi)有對(duì)應(yīng)的SCHEMA。當(dāng)我們?cè)趫?zhí)行SELECT語(yǔ)句時(shí),就會(huì)收到一個(gè)類似于下面的錯(cuò)誤提示信息:
ORA-39112: 字符串:<SCHEMA_NAME>不存在。
此時(shí),我們需要先創(chuàng)建一個(gè)SCHEMA,再執(zhí)行SELECT語(yǔ)句。在創(chuàng)建SCHEMA時(shí),需要指定所屬的用戶,即USER01。命令如下:
CREATE SCHEMA <SCHEMA_NAME> AUTHORIZATION <USER01>;
當(dāng)然,在實(shí)際操作時(shí),需要根據(jù)具體的情況進(jìn)行調(diào)整,對(duì)于普通用戶而言,需要給其授予創(chuàng)建SCHEMA的權(quán)限,命令如下:
GRANT CREATE ANY SCHEMA TO <USER01>;
同時(shí),在執(zhí)行DDL語(yǔ)句時(shí),需要注意對(duì)象前綴,即在表或者視圖名前面加上SCHEMA名稱。
除了以上情況以外,還有一種可能性,就是當(dāng)前用戶并沒(méi)有直接訪問(wèn)SCHEMA的權(quán)限,而是需要通過(guò)角色來(lái)授權(quán)。此時(shí),我們需要使用如下命令進(jìn)行授權(quán):
GRANT CONNECT, RESOURCE, DBA TO <USER01>; GRANT <ROLE_NAME> TO <USER01>;
其中,CONNECT、RESOURCE和DBA是系統(tǒng)預(yù)定義的角色,分別表示連接權(quán)限、資源管理權(quán)限以及DBA(數(shù)據(jù)庫(kù)管理員)權(quán)限。如果需要自定義角色,可以使用如下命令:
CREATE ROLE <ROLE_NAME>; GRANT <PRIVILEGE_NAME> TO <ROLE_NAME>; GRANT <ROLE_NAME> TO <USER01>;
其中,PRIVILEGE_NAME表示授予的權(quán)限名稱,例如創(chuàng)建、刪除表等。直接將權(quán)限授予給普通用戶可能會(huì)造成安全風(fēng)險(xiǎn),因此我們通常會(huì)將權(quán)限授予給角色,再將角色授權(quán)給用戶。
總之,Oracle 39112錯(cuò)誤常常發(fā)生在沒(méi)有SCHEMA的情況下執(zhí)行DDL語(yǔ)句時(shí),需要我們創(chuàng)建SCHEMA并授予用戶相應(yīng)的權(quán)限,或者通過(guò)角色進(jìn)行授權(quán)。