VARCHAR2(0) [message #453634] |
Fri, 30 April 2010 02:21  |
Its_me_ved
Messages: 979 Registered: October 2009 Location: India
|
Senior Member |
|
|
SQL> CREATE TABLE T0430 AS SELECT NULL X FROM DUAL;
CREATE TABLE T0430 AS SELECT NULL X FROM DUAL
*
ERROR at line 1:
ORA-01723: zero-length columns are not allowed
Elapsed: 00:00:00.01
SQL> CREATE TABLE T0430 AS SELECT CAST(NULL AS VARCHAR2(1)) X FROM DUAL;
Table created.
Elapsed: 00:00:00.01
SQL> CREATE VIEW V0430 AS SELECT NULL X FROM DUAL;
View created.
Elapsed: 00:00:00.00
SQL> DESC T0430
Name Null? Type
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
X VARCHAR2(1)
SQL> DESC V0430
Name Null? Type
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
X VARCHAR2
SQL> SELECT column_name, data_type, data_length
2 FROM user_tab_columns
3 WHERE table_name='V0430';
COLUMN_NAME DATA_TYPE DATA_LENGTH
------------------------------ ---------------------------------------------------------------------------------------------------------- -----------
X VARCHAR2 0
Elapsed: 00:00:00.00
SQL> SPOOL OFF
SQL> DROP TABLE T0430;
Table dropped.
Elapsed: 00:00:00.68
SQL> CREATE TABLE T0430( X VARCHAR2(0));
CREATE TABLE T0430( X VARCHAR2(0))
*
ERROR at line 1:
ORA-01723: zero-length columns are not allowed
Elapsed: 00:00:00.00
SQL> CREATE TABLE T0430 AS SELECT CAST(NULL AS VARCHAR2(1)) X FROM DUAL;
Table created.
How come we have VARCHAR2(0) in a view ? What is this VARCHAR2(0)?
VARCHAR2(0) is a null placeholder.If so, then why we can not create the same in case of a table?
Regards,
Ved
[Updated on: Fri, 30 April 2010 02:43] Report message to a moderator
|
|
|
|
Re: VARCHAR2(0) [message #453656 is a reply to message #453654] |
Fri, 30 April 2010 03:29   |
Its_me_ved
Messages: 979 Registered: October 2009 Location: India
|
Senior Member |
|
|
SQL> set linesize 80
SQL> CREATE TABLE T0430 AS SELECT NULL X FROM DUAL;
CREATE TABLE T0430 AS SELECT NULL X FROM DUAL
*
ERROR at line 1:
ORA-01723: zero-length columns are not allowed
Elapsed: 00:00:00.01
SQL> CREATE TABLE T0430 AS SELECT CAST(NULL AS VARCHAR2(1)) X FROM DUAL;
Table created.
Elapsed: 00:00:00.01
SQL> CREATE VIEW V0430 AS SELECT NULL X FROM DUAL;
View created.
Elapsed: 00:00:00.01
SQL> COLUMN column_name FORMAT a20
SQL> COLUMN data_type FORMAT a20
SQL> column data_length format 99999
SQL> SELECT column_name, data_type, data_length
2 FROM user_tab_columns
3 WHERE table_name='V0430';
COLUMN_NAME DATA_TYPE DATA_LENGTH
-------------------- -------------------- -----------
X VARCHAR2 0
Elapsed: 00:00:00.01
SQL> SELECT column_name, data_type, data_length
2 FROM user_tab_columns
3 WHERE table_name='T0430';
COLUMN_NAME DATA_TYPE DATA_LENGTH
-------------------- -------------------- -----------
X VARCHAR2 1
Elapsed: 00:00:00.04
SQL> DROP TABLE T0430
2 /
Table dropped.
Elapsed: 00:00:00.01
SQL> CREATE TABLE T0430( X VARCHAR2(0));
CREATE TABLE T0430( X VARCHAR2(0))
*
ERROR at line 1:
ORA-01723: zero-length columns are not allowed
Elapsed: 00:00:00.00
SQL> CREATE TABLE T0430 AS SELECT CAST(NULL AS VARCHAR2(1)) X FROM DUAL;
Table created.
Elapsed: 00:00:00.03
SQL> SPOOL OFF
My apologies for the mistake. But
SQL> CREATE TABLE T0430 AS SELECT CAST(NULL AS VARCHAR2(1)) X FROM DUAL;
Here why does you need minimum 1 byte? If varchar2(0) is a placeholder for null it could have varchar2(0).
|
|
|
|
|