如何获取在 Oracle Object Type 中声明的 VARCHAR2 属性的长度,使用 OracleTypeCHAR 元数据,而不管数据库字符集
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5044312/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to obtain the length of VARCHAR2 attribute declared in Oracle Object Type, using OracleTypeCHAR metadata, regardless of database character set
提问by morisil
My Java application depends on Oracle Object Types metadata. I use oracle.jdbc.oracore.OracleTypeCHAR
class to access these metadata with JDBC. After converting the database to charset AL32UTF8
, the OracleTypeCHAR#getLength()
method returns results multiplied by factor of 4 comparing to what is declared in Oracle Object Type - for example:
我的 Java 应用程序依赖于 Oracle 对象类型元数据。我使用oracle.jdbc.oracore.OracleTypeCHAR
类通过 JDBC 访问这些元数据。将数据库转换为 charset 后AL32UTF8
,该OracleTypeCHAR#getLength()
方法返回的结果乘以因子 4 与 Oracle 对象类型中声明的相比 - 例如:
some_attribute varchar2(10)
Would result in lenght 40
, when lenght 10
was returned with the previous charset. Is there a way to obtain the raw value from PL/SQL without parsing OOT source code?
40
当 lenght10
与前一个字符集一起返回时,将导致 lenght 。有没有办法在不解析 OOT 源代码的情况下从 PL/SQL 获取原始值?
回答by Janek Bogucki
The character length for a character column can be found in user_tab_columns.CHAR_LENGTH,
字符列的字符长度可以在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
Use this query to find the character length of the column,
使用此查询查找列的字符长度,
select
char_length
from
user_tab_columns
where
table_name = 'T' and column_name = 'SOME_ATTRIBUTE';