0

DBA_TYPE_ATTRSOracle 11 では、 / ALL_TYPE_ATTRS/で列 CHAR_USED を使用しますUSER_TYPE_ATTRS

select CHAR_USED from SYS.DBA_TYPE_ATTRS

しかし、10 では、この列は存在しません

テストの種類:

create type TEST_TYPE_WITH_CHAR as object (
    A varchar2(10 char)
);

create type TEST_TYPE_WITH_BYTE as object (
    A varchar2(10 byte)
);

どのタイプにcharが含まれているか、どのバイトが含まれているかを判断する方法は?

4

1 に答える 1

1

10gのこの情報はそこにありますが、私たちにはまったく公開されていません。したがって、いくつかのオプションしかありません。(11gでは、ALLビューでのみ表示され、最近のパッチで追加されていない限り、DBA / USERビューでは表示されません)

  1. dba_sourceにはそれがありますが、それを取得するためにSQLを手動で解析します。

  2. sys.attribute$に結合して抽出する新しいビューを作成できますdecode(bitand(properties, 4096), 4096, 'C', 'B')

  3. 既存の*type_attrビューを修正できます(ただし、これはOracleではサポートされません)。ビューにパーツを選択するだけで追加decode(bitand(a.properties, 4096), 4096, 'C', 'B')できます(「a」はsys.attribute $への参照です)。

新しいビューの例。

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

SQL> create view type_chars
  2  as
  3  select ta.owner, ta.type_name, ta.attr_name, decode(bitand(a.properties, 4096), 4096, 'C', 'B') char_used
  4    from sys.attribute$ a, sys.type$ t, sys.obj$ o, dba_objects ob, dba_type_attrs ta
  5  where ta.owner = ob.owner
  6    and ta.type_name = ob.object_name
  7    and a.toid = t.toid
  8    and a.version# = t.version#
  9    and t.toid = o.oid$
 10    and o.subname is null
 11    and ob.object_id = o.obj#
 12    and a.name = ta.attr_name;

View created.

SQL> create type mytype as object (a varchar2(20), b number, c varchar2(30 char));
  2  /

Type created.

SQL> select * from type_chars where type_name = 'MYTYPE' and owner= user;

OWNER                          TYPE_NAME                      ATTR_NAME                      C
------------------------------ ------------------------------ ------------------------------ -
DTD_TRADE                      MYTYPE                         A                              B
DTD_TRADE                      MYTYPE                         B                              B
DTD_TRADE                      MYTYPE                         C                              C

SQL>
于 2012-12-18T12:45:03.893 に答える