フォームowner.tablename
;で識別されるオブジェクトを指定します。所有者とテーブル名を分割するにはどうすればよいですか?
文字列のトークン化についての私の考えはどちらも、select owner, object_name from all_objects where owner || '.' || object_name = 'SCHEMA.TABLENAME'
ハックのように見えます。
フォームowner.tablename
;で識別されるオブジェクトを指定します。所有者とテーブル名を分割するにはどうすればよいですか?
文字列のトークン化についての私の考えはどちらも、select owner, object_name from all_objects where owner || '.' || object_name = 'SCHEMA.TABLENAME'
ハックのように見えます。
DBMS_UTILITY.name_tokenize
この目的で使用できます。
このプロシージャは、パーサーを呼び出して、指定された名前を "a [. b [. c ]][@ dblink ]" として解析します。二重引用符を削除するか、引用符がない場合は大文字に変換します。あらゆる種類のコメントを無視し、意味分析は行いません。欠損値は NULL のままです。
例えば
DBMS_UTILITY.NAME_TOKENIZE
( name => 'SCHEMA.TABLENAME'
, a => v_schema
, b => v_object_name
, c => v_subobject -- ignore
, dblink => v_dblink
, nextpos => v_nextpos -- ignore
);
http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_util.htm#BJEFIFBJ
SELECT SUBSTR('SCHEMA.TABLENAME', 0, INSTR('SCHEMA.TABLENAME', '.') - 1) OWNER,
SUBSTR('SCHEMA.TABLENAME', INSTR('SCHEMA.TABLENAME', '.') + 1) TABLE_NAME
FROM DUAL