我的Java应用程序依赖于Oracle Object Types元数据。我使用oracle.jdbc.oracore.OracleTypeCHAR
类通过JDBC访问这些元数据。将数据库转换为charset AL32UTF8
后,OracleTypeCHAR#getLength()
方法返回的结果乘以因子4,与Oracle对象类型中声明的结果相比 - 例如:
some_attribute varchar2(10)
当使用前一个字符集返回长度40
时,会导致长度10
。有没有办法在不解析OOT源代码的情况下从PL / SQL获取原始值?
答案 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';