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

mor*_*sil 5 java oracle plsql metadata jdbc

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

some_attribute varchar2(10)
Run Code Online (Sandbox Code Playgroud)

40当 lenght10与前一个字符集一起返回时,将导致 lenght 。有没有办法在不解析OOT源代码的情况下从PL/SQL获取原始值?

Jan*_*cki 3

字符列的字符长度可以在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
Run Code Online (Sandbox Code Playgroud)

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

select
  char_length
from
  user_tab_columns
where
  table_name = 'T' and column_name = 'SOME_ATTRIBUTE';
Run Code Online (Sandbox Code Playgroud)