Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

DATA_LENGTH vs CHAR_COL_DECL_LENGTH vs CHAR_LENGTH

xxsawerFeb 26 2020 — edited Feb 27 2020

Hi All,

I would like to understand the difference amongst the LENGTH-type columns in the USER_TAB_COLUMNS view.

I have following environment:

SELECT * FROM V$VERSION;

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

PL/SQL Release 12.1.0.2.0 - Production

"CORE    12.1.0.2.0    Production"

TNS for Linux: Version 12.1.0.2.0 - Production

NLSRTL Version 12.1.0.2.0 - Production

SELECT PARAMETER, VALUE

  FROM V$NLS_PARAMETERS

WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET', 'NLS_LENGTH_SEMANTICS');

NLS_CHARACTERSET          AL32UTF8

NLS_NCHAR_CHARACTERSET    AL16UTF16

NLS_LENGTH_SEMANTICS      BYTE

Say that I create following table:

CREATE TABLE TEST_TABLE(

   STRING_1       VARCHAR2(10)      DEFAULT 'a',

   STRING_2       VARCHAR2(10 CHAR) DEFAULT 'a',

   STRING_3       NVARCHAR2(10)     DEFAULT 'a'

);

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, CHAR_LENGTH, CHAR_COL_DECL_LENGTH, DEFAULT_LENGTH, CHAR_USED

  FROM USER_TAB_COLUMNS

WHERE TABLE_NAME = 'TEST_TABLE';

TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, CHAR_LENGTH, CHAR_COL_DECL_LENGTH, DEFAULT_LENGTH, CHAR_USED

TEST_TABLE    STRING_1    VARCHAR2    10            10            10                    3            B

TEST_TABLE    STRING_2    VARCHAR2    40            10            40                    3            C

TEST_TABLE    STRING_3    NVARCHAR2   20            10            10                    4            C

Documentation for above mentioned columns says following:

DATA_LENGTH Length of the column (in bytes)

DEFAULT_LENGTH Length of the default value for the column

CHAR_COL_DECL_LENGTH Declaration length of the character type column

CHAR_LENGTH  Displays the length of the column in characters. This value only applies to the following datatypes: CHAR, VARCHAR2, NCHAR, NVARCHAR2

Looking at the values provided by the query, values in columns DATA_LENGTH and CHAR_LENGTH are understandable and I would say correct (UTF8 can have up to 4B per character, UTF16 has 2B per character).

However what are the values of CHAR_COL_DECL_LENGTH and DEFAULT_LENGTH??? Documentation says nothing about whether it is in units of characters or bytes - seems to be both. DEFAULT_LENGTH is completely out of my understanding...

Thanks in advance for all good ideas.

Dan

This post has been answered by odie_63 on Feb 26 2020
Jump to Answer
Comments
Post Details
Added on Feb 26 2020
4 comments
8,159 views