如何使用OracleTypeCHAR元数据获取Oracle对象类型中声明的VARCHAR2属性的长度,而不管数据库字符集如何

时间:2011-02-18 17:11:11

标签: java oracle jdbc plsql metadata

我的Java应用程序依赖于Oracle Object Types元数据。我使用oracle.jdbc.oracore.OracleTypeCHAR类通过JDBC访问这些元数据。将数据库转换为charset AL32UTF8后,OracleTypeCHAR#getLength()方法返回的结果乘以因子4,与Oracle对象类型中声明的结果相比 - 例如:

some_attribute varchar2(10)

当使用前一个字符集返回长度40时,会导致长度10。有没有办法在不解析OOT源代码的情况下从PL / SQL获取原始值?

1 个答案:

答案 0 :(得分:2)

字符列的字符长度可在 user_tab_columns.CHAR_LENGTH 中找到,

select column_name, comments from all_col_comments where table_name = 'USER_TAB_COLUMNS';

COLUMN_NAME          COMMENTS

TABLE_NAME           Table, view or cluster name
COLUMN_NAME          Column name
DATA_TYPE            Datatype of the column
DATA_TYPE_MOD        Datatype modifier of the column
DATA_TYPE_OWNER      Owner of the datatype of the column
DATA_LENGTH          Length of the column in bytes
DATA_PRECISION       Length: decimal digits (NUMBER) or binary digits (FLOAT)
DATA_SCALE           Digits to right of decimal point in a number
NULLABLE             Does column allow NULL values?
COLUMN_ID            Sequence number of the column as created
DEFAULT_LENGTH       Length of default value for the column
DATA_DEFAULT         Default value for the column
NUM_DISTINCT         The number of distinct values in the column
LOW_VALUE            The low value in the column
HIGH_VALUE           The high value in the column
DENSITY              The density of the column
NUM_NULLS            The number of nulls in the column
NUM_BUCKETS          The number of buckets in histogram for the column
LAST_ANALYZED        The date of the most recent time this column was analyzed
SAMPLE_SIZE          The sample size used in analyzing this column
CHARACTER_SET_NAME   Character set name
CHAR_COL_DECL_LENGTH Declaration length of character type column
GLOBAL_STATS         Are the statistics calculated without merging underlying partitions?
USER_STATS           Were the statistics entered directly by the user?
AVG_COL_LEN          The average length of the column in bytes
CHAR_LENGTH          The maximum length of the column in characters
CHAR_USED            C is maximum length given in characters, B if in bytes
V80_FMT_IMAGE        Is column data in 8.0 image format?
DATA_UPGRADED        Has column data been upgraded to the latest type version format?
HISTOGRAM

使用此查询查找列的字符长度

select
  char_length
from
  user_tab_columns
where
  table_name = 'T' and column_name = 'SOME_ATTRIBUTE';