1

フォームowner.tablename;で識別されるオブジェクトを指定します。所有者とテーブル名を分割するにはどうすればよいですか?

文字列のトークン化についての私の考えはどちらも、select owner, object_name from all_objects where owner || '.' || object_name = 'SCHEMA.TABLENAME'ハックのように見えます。

4

2 に答える 2

4

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

于 2013-10-25T04:07:00.920 に答える
1
SELECT SUBSTR('SCHEMA.TABLENAME', 0, INSTR('SCHEMA.TABLENAME', '.') - 1) OWNER,
      SUBSTR('SCHEMA.TABLENAME', INSTR('SCHEMA.TABLENAME', '.') + 1) TABLE_NAME
FROM DUAL
于 2013-10-24T16:49:01.103 に答える