<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Surprises</title>
	<atom:link href="http://jonathanlewis.wordpress.com/2012/08/30/surprises/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/</link>
	<description>Just another Oracle weblog</description>
	<lastBuildDate>Fri, 24 May 2013 13:27:07 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: Jared</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49720</link>
		<dc:creator><![CDATA[Jared]]></dc:creator>
		<pubDate>Sat, 01 Sep 2012 17:25:17 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49720</guid>
		<description><![CDATA[Thanks Jonathan,  I also noticed that r2 is not needed, so here is the more succinct DDL for those following this:

[sourcecode language=&quot;sql&quot;]

create table t4k
as
with data as (
   select cast(rpad(&#039;0&#039;,2000,&#039;0&#039;) as raw(2000)) r1 from dual
)
select  r1&#124;&#124;r1 xxx
from data
where rownum = 0

[/sourcecode]

I also came to the conclusion that sys_op_map_nonnull() is a bit of a red herring, though I had not thought much past that yet as to whether this might be intentional or a bug.

The explanation for the error &quot;ORA-00910: specified length too long for its datatype&quot; provides a clue that helps ferret out why this may be allowed.

[jkstill]$ oerr ora 910
00910, 00000, &quot;specified length too long for its datatype&quot;
// *Cause: for datatypes CHAR and RAW, the length specified was &gt; 2000;
//         otherwise, the length specified was &gt; 4000.
// *Action:  use a shorter length or switch to a datatype permitting a
//           longer length such as a VARCHAR2, LONG CHAR, or LONG RAW

Notice that the length restriction pertains to CHAR as well as RAW data types.

Suspecting that that allowance for 4k data types might have been made for the data dictionary, I ran a query looking for CHAR and RAW data type columns with a length &gt; 2000.

Output is edited for brevity:

[sourcecode language=&quot;sql&quot;]

select owner, table_name, column_name, data_type, data_length
from dba_tab_columns
where data_type in (&#039;CHAR&#039;,&#039;RAW&#039;)
and data_length &gt; 2000
order by 1,2,3
/


OWNER      TABLE NAME                     COLUMN     DATA_TYPE  DATA_LENGTH
---------- ------------------------------ ---------- ---------- -----------
JKSTILL    T4000                          XXX        RAW               4000
SYS        KU$_10_1_FHTABLE_VIEW          TSTZ_COLS  CHAR              4000
...
SYS        KU$_TABLE_DATA_VIEW            TSTZ_COLS  CHAR              4000

23 rows selected.

[/sourcecode]

In this 11.2.0.3 database all of the columns that exceed the 2k limit belong to SYS and are all CHAR(4000), with the exception of the test table.
In addition, these are all views that are used to track columns that are of type TIMESTAMP WITH TIMEZONE.

Taking a look at how the view KU$_IOTABLE_DATA_VIEW is created (found in OH/rdbms/admin/catmeta.sql) it is seen that it and all the other views of interest here are created from object types, and use an inline view that selects from a funtion to create the TSTZ_COLS column:

[sourcecode language=&quot;sql&quot;]

  (select sys.dbms_metadata_util.has_tstz_cols(t.obj#) from dual)

[/sourcecode]

A little test shows that uses the same method as seen in catmeta.sql to create a test view creates a view with a column of CHAR(4000).

[sourcecode language=&quot;sql&quot;]

create or replace type char_test_t as object
(
   tstz_test char(1)
)
/

create or replace function f return char
as
begin
   return &#039;Y&#039;;
end;
/

create or replace force view char_test of char_test_t
with object OID(1)
as select (select f from dual)
from dual
/

desc char_test

[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>Thanks Jonathan,  I also noticed that r2 is not needed, so here is the more succinct DDL for those following this:</p>
<pre class="brush: sql; title: ; notranslate">

create table t4k
as
with data as (
   select cast(rpad('0',2000,'0') as raw(2000)) r1 from dual
)
select  r1||r1 xxx
from data
where rownum = 0

</pre>
<p>I also came to the conclusion that sys_op_map_nonnull() is a bit of a red herring, though I had not thought much past that yet as to whether this might be intentional or a bug.</p>
<p>The explanation for the error &#8220;ORA-00910: specified length too long for its datatype&#8221; provides a clue that helps ferret out why this may be allowed.</p>
<p>[jkstill]$ oerr ora 910<br />
00910, 00000, &#8220;specified length too long for its datatype&#8221;<br />
// *Cause: for datatypes CHAR and RAW, the length specified was &gt; 2000;<br />
//         otherwise, the length specified was &gt; 4000.<br />
// *Action:  use a shorter length or switch to a datatype permitting a<br />
//           longer length such as a VARCHAR2, LONG CHAR, or LONG RAW</p>
<p>Notice that the length restriction pertains to CHAR as well as RAW data types.</p>
<p>Suspecting that that allowance for 4k data types might have been made for the data dictionary, I ran a query looking for CHAR and RAW data type columns with a length &gt; 2000.</p>
<p>Output is edited for brevity:</p>
<pre class="brush: sql; title: ; notranslate">

select owner, table_name, column_name, data_type, data_length
from dba_tab_columns
where data_type in ('CHAR','RAW')
and data_length &gt; 2000
order by 1,2,3
/


OWNER      TABLE NAME                     COLUMN     DATA_TYPE  DATA_LENGTH
---------- ------------------------------ ---------- ---------- -----------
JKSTILL    T4000                          XXX        RAW               4000
SYS        KU$_10_1_FHTABLE_VIEW          TSTZ_COLS  CHAR              4000
...
SYS        KU$_TABLE_DATA_VIEW            TSTZ_COLS  CHAR              4000

23 rows selected.

</pre>
<p>In this 11.2.0.3 database all of the columns that exceed the 2k limit belong to SYS and are all CHAR(4000), with the exception of the test table.<br />
In addition, these are all views that are used to track columns that are of type TIMESTAMP WITH TIMEZONE.</p>
<p>Taking a look at how the view KU$_IOTABLE_DATA_VIEW is created (found in OH/rdbms/admin/catmeta.sql) it is seen that it and all the other views of interest here are created from object types, and use an inline view that selects from a funtion to create the TSTZ_COLS column:</p>
<pre class="brush: sql; title: ; notranslate">

  (select sys.dbms_metadata_util.has_tstz_cols(t.obj#) from dual)

</pre>
<p>A little test shows that uses the same method as seen in catmeta.sql to create a test view creates a view with a column of CHAR(4000).</p>
<pre class="brush: sql; title: ; notranslate">

create or replace type char_test_t as object
(
   tstz_test char(1)
)
/

create or replace function f return char
as
begin
   return 'Y';
end;
/

create or replace force view char_test of char_test_t
with object OID(1)
as select (select f from dual)
from dual
/

desc char_test

</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49699</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Sat, 01 Sep 2012 10:09:35 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49699</guid>
		<description><![CDATA[Jared,

Nicely done. So it&#039;s not a specific anomaly due to the use of sys_op_map_nonnull(), it&#039;s a generic feature of a derived raw() value in a CTAS.

One last tiny, peripheral, touch - if you add &#039;where rownum = 0&#039; to the create statement, table t4k still gets created with a column of type raw(4000), but with no data in it.]]></description>
		<content:encoded><![CDATA[<p>Jared,</p>
<p>Nicely done. So it&#8217;s not a specific anomaly due to the use of sys_op_map_nonnull(), it&#8217;s a generic feature of a derived raw() value in a CTAS.</p>
<p>One last tiny, peripheral, touch &#8211; if you add &#8216;where rownum = 0&#8242; to the create statement, table t4k still gets created with a column of type raw(4000), but with no data in it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jared</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49682</link>
		<dc:creator><![CDATA[Jared]]></dc:creator>
		<pubDate>Sat, 01 Sep 2012 00:30:14 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49682</guid>
		<description><![CDATA[Ok, commenting on my own post here.

I traced both a standard create statement and the execute immediate create.

The trace for execute immedate revealed this:

[sourcecode language=&quot;sql&quot;]
PARSING IN CURSOR #47836159092840 len=4081 dep=1 uid=90 oct=1 lid=90 tim=1346458078205323 hv=2343315936 ad=&#039;aaa2dee8&#039; sqlid=&#039;88qs6bf5usag0&#039;
create table t4k as select sys_op_map_nonnull(sys_op_map_nonnull(&#039;000000&#039; # truncated for brevity
END OF STMT
...
EXEC #47836159092840:c=69989,e=85539,p=0,cr=177,cu=85,mis=0,r=1,dep=1,og=1,plh=2781518217,tim=1346458078290968
STAT #47836159092840 id=1 cnt=0 pid=0 pos=1 obj=0 op=&#039;LOAD AS SELECT  (cr=113 pr=0 pw=1 time=36322 us)&#039;
STAT #47836159092840 id=2 cnt=1 pid=1 pos=1 obj=0 op=&#039;FAST DUAL  (cr=0 pr=0 pw=0 time=7 us cost=2 size=0 card=1)&#039;
CLOSE #47836159092840:c=0,e=8,dep=1,type=0,tim=1346458078291140
[/sourcecode]

The LOAD AS keywords indicate a direct path load.
Direct path load is what is used by CTAS, so here is a method to create the table directly as DDL:

[sourcecode language=&quot;sql&quot;]

drop table t4k;

create table t4k
as
with data as (
   select
      cast(rpad(&#039;0&#039;,2000,&#039;0&#039;) as raw(2000)) r1
      , cast(rpad(&#039;0&#039;,2000,&#039;0&#039;) as raw(2000)) r2
   from dual
)
select  r1&#124;&#124;r2 xxx
from data
/

desc t4k;

[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>Ok, commenting on my own post here.</p>
<p>I traced both a standard create statement and the execute immediate create.</p>
<p>The trace for execute immedate revealed this:</p>
<pre class="brush: sql; title: ; notranslate">
PARSING IN CURSOR #47836159092840 len=4081 dep=1 uid=90 oct=1 lid=90 tim=1346458078205323 hv=2343315936 ad='aaa2dee8' sqlid='88qs6bf5usag0'
create table t4k as select sys_op_map_nonnull(sys_op_map_nonnull('000000' # truncated for brevity
END OF STMT
...
EXEC #47836159092840:c=69989,e=85539,p=0,cr=177,cu=85,mis=0,r=1,dep=1,og=1,plh=2781518217,tim=1346458078290968
STAT #47836159092840 id=1 cnt=0 pid=0 pos=1 obj=0 op='LOAD AS SELECT  (cr=113 pr=0 pw=1 time=36322 us)'
STAT #47836159092840 id=2 cnt=1 pid=1 pos=1 obj=0 op='FAST DUAL  (cr=0 pr=0 pw=0 time=7 us cost=2 size=0 card=1)'
CLOSE #47836159092840:c=0,e=8,dep=1,type=0,tim=1346458078291140
</pre>
<p>The LOAD AS keywords indicate a direct path load.<br />
Direct path load is what is used by CTAS, so here is a method to create the table directly as DDL:</p>
<pre class="brush: sql; title: ; notranslate">

drop table t4k;

create table t4k
as
with data as (
   select
      cast(rpad('0',2000,'0') as raw(2000)) r1
      , cast(rpad('0',2000,'0') as raw(2000)) r2
   from dual
)
select  r1||r2 xxx
from data
/

desc t4k;

</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jared</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49681</link>
		<dc:creator><![CDATA[Jared]]></dc:creator>
		<pubDate>Sat, 01 Sep 2012 00:02:53 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49681</guid>
		<description><![CDATA[Valentin, this is a very interesting find.
Questions that come to mind:
Why does this work?
Why does Oracle allow creating a 4k raw in with &#039;execute immediate&#039;, but not with a straight &#039;create table&#039;?
I suspect a difference in code path is responsible, but it still seems Oracle is imposing a somewhat artificial limit on RAW columns when a straight &#039;create table&#039; is used.

Not that I am expecting anyone to answer these directly, these are just the things that come to mind.

Here is a slight modification to the code to create the 4k RAW column.
Its only advantage it is quite a bit faster to run than the loop.
The trick is nested calls to sys_op_map_nonnull to add the extra 2 bytes.

[sourcecode language=&quot;sql&quot;]
drop table t4k purge;

declare
   r1 raw(2000);
   r2 raw(2000);
   v_sql varchar2(10000);
begin
    select cast(rpad(&#039;0&#039;,2000,&#039;0&#039;) as raw(2000)) into r1 from dual;
    select cast(rpad(&#039;0&#039;,1998,&#039;0&#039;) as raw(1998)) into r2 from dual;
    v_sql := &#039;create table t4k as select sys_op_map_nonnull(sys_op_map_nonnull(&#039;&#039;&#039; &#124;&#124; r1&#124;&#124;r2 &#124;&#124; &#039;&#039;&#039;)) xxx from dual&#039;;
    dbms_output.put_line(v_sql);
    execute immediate v_sql;
end;
/

desc t4k
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>Valentin, this is a very interesting find.<br />
Questions that come to mind:<br />
Why does this work?<br />
Why does Oracle allow creating a 4k raw in with &#8216;execute immediate&#8217;, but not with a straight &#8216;create table&#8217;?<br />
I suspect a difference in code path is responsible, but it still seems Oracle is imposing a somewhat artificial limit on RAW columns when a straight &#8216;create table&#8217; is used.</p>
<p>Not that I am expecting anyone to answer these directly, these are just the things that come to mind.</p>
<p>Here is a slight modification to the code to create the 4k RAW column.<br />
Its only advantage it is quite a bit faster to run than the loop.<br />
The trick is nested calls to sys_op_map_nonnull to add the extra 2 bytes.</p>
<pre class="brush: sql; title: ; notranslate">
drop table t4k purge;

declare
   r1 raw(2000);
   r2 raw(2000);
   v_sql varchar2(10000);
begin
    select cast(rpad('0',2000,'0') as raw(2000)) into r1 from dual;
    select cast(rpad('0',1998,'0') as raw(1998)) into r2 from dual;
    v_sql := 'create table t4k as select sys_op_map_nonnull(sys_op_map_nonnull(''' || r1||r2 || ''')) xxx from dual';
    dbms_output.put_line(v_sql);
    execute immediate v_sql;
end;
/

desc t4k
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jared</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49676</link>
		<dc:creator><![CDATA[Jared]]></dc:creator>
		<pubDate>Fri, 31 Aug 2012 22:38:08 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49676</guid>
		<description><![CDATA[Thanks Jonathan, I didn&#039;t see the source icon.  Interesting stuff, off to play now.]]></description>
		<content:encoded><![CDATA[<p>Thanks Jonathan, I didn&#8217;t see the source icon.  Interesting stuff, off to play now.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49674</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Fri, 31 Aug 2012 21:12:40 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49674</guid>
		<description><![CDATA[Jared,

If you click on the &quot;show source&quot; icon in the comment the window expands to show the echoed output of a demonstration script.  (You might want to add a &quot;purge&quot; to the drop table command.)

I ran it, and ended up with a table with a column of type raw(4000), and a block dump showed that the internal length of the newly inserted row was actually stored as 4,000 bytes - and yes, a simple &quot;create table&quot; won&#039;t allow you to get past raw(2000).]]></description>
		<content:encoded><![CDATA[<p>Jared,</p>
<p>If you click on the &#8220;show source&#8221; icon in the comment the window expands to show the echoed output of a demonstration script.  (You might want to add a &#8220;purge&#8221; to the drop table command.)</p>
<p>I ran it, and ended up with a table with a column of type raw(4000), and a block dump showed that the internal length of the newly inserted row was actually stored as 4,000 bytes &#8211; and yes, a simple &#8220;create table&#8221; won&#8217;t allow you to get past raw(2000).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jared</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49673</link>
		<dc:creator><![CDATA[Jared]]></dc:creator>
		<pubDate>Fri, 31 Aug 2012 21:01:19 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49673</guid>
		<description><![CDATA[Please give an example, as raw it limited to 2000 on 11.2.0.3 that I am testing on.]]></description>
		<content:encoded><![CDATA[<p>Please give an example, as raw it limited to 2000 on 11.2.0.3 that I am testing on.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonathan Lewis</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49608</link>
		<dc:creator><![CDATA[Jonathan Lewis]]></dc:creator>
		<pubDate>Fri, 31 Aug 2012 09:17:03 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49608</guid>
		<description><![CDATA[Valentin,

Extraordinary - how do you manage to find such bizarre cases ?!]]></description>
		<content:encoded><![CDATA[<p>Valentin,</p>
<p>Extraordinary &#8211; how do you manage to find such bizarre cases ?!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sokrates</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49607</link>
		<dc:creator><![CDATA[Sokrates]]></dc:creator>
		<pubDate>Fri, 31 Aug 2012 08:31:42 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49607</guid>
		<description><![CDATA[nice one, Valentin !]]></description>
		<content:encoded><![CDATA[<p>nice one, Valentin !</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Valentin Nikotin</title>
		<link>http://jonathanlewis.wordpress.com/2012/08/30/surprises/#comment-49576</link>
		<dc:creator><![CDATA[Valentin Nikotin]]></dc:creator>
		<pubDate>Thu, 30 Aug 2012 19:52:13 +0000</pubDate>
		<guid isPermaLink="false">http://jonathanlewis.wordpress.com/?p=9375#comment-49576</guid>
		<description><![CDATA[There are one more funny thing with sys_op_map_nonnull - you can create table with RAW(4000) column and use it succesfully:

[sourcecode language=&quot;SQL&quot; collapse=&quot;true&quot;]
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as test_user
 
SQL&gt; 
SQL&gt; begin
  2    execute immediate &#039;create table t2001 as select sys_op_map_nonnull(cast(null as raw(2000))) xxx from dual&#039;;
  3    for i in 1 .. 1999 loop
  4      execute immediate &#039;create table t&#039;&#124;&#124;(2001+i)&#124;&#124;&#039; as select sys_op_map_nonnull(xxx) xxx from t&#039;&#124;&#124;(2000+i);
  5      execute immediate &#039;drop table t&#039;&#124;&#124;(2000+i);
  6    end loop;
  7  end;
  8  /
 
PL/SQL procedure successfully completed
 
SQL&gt; select dbms_metadata.get_ddl(&#039;TABLE&#039;, &#039;T4000&#039;) from dual;
 
DBMS_METADATA.GET_DDL(&#039;TABLE&#039;,
--------------------------------------------------------------------------------
 
  CREATE TABLE &quot;TEST_USER&quot;.&quot;T4000&quot; 
   (	&quot;XXX&quot; RAW(4000)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE &quot;USERS&quot; 
 
 

SQL&gt; declare
  2    raw4000 raw(4000) := hextoraw(lpad(&#039;0&#039;,8000,&#039;0&#039;));
  3  begin
  4    dbms_output.put_line(utl_raw.length(raw4000));
  5    insert into T4000 values (raw4000);
  6  end;
  7  /
 
PL/SQL procedure successfully completed
 
SQL&gt; select utl_raw.length(xxx) from T4000;
 
UTL_RAW.LENGTH(XXX)
-------------------
               2000
               4000
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>There are one more funny thing with sys_op_map_nonnull &#8211; you can create table with RAW(4000) column and use it succesfully:</p>
<pre class="brush: sql; collapse: true; light: false; title: ; toolbar: true; notranslate">
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as test_user
 
SQL&gt; 
SQL&gt; begin
  2    execute immediate 'create table t2001 as select sys_op_map_nonnull(cast(null as raw(2000))) xxx from dual';
  3    for i in 1 .. 1999 loop
  4      execute immediate 'create table t'||(2001+i)||' as select sys_op_map_nonnull(xxx) xxx from t'||(2000+i);
  5      execute immediate 'drop table t'||(2000+i);
  6    end loop;
  7  end;
  8  /
 
PL/SQL procedure successfully completed
 
SQL&gt; select dbms_metadata.get_ddl('TABLE', 'T4000') from dual;
 
DBMS_METADATA.GET_DDL('TABLE',
--------------------------------------------------------------------------------
 
  CREATE TABLE &quot;TEST_USER&quot;.&quot;T4000&quot; 
   (	&quot;XXX&quot; RAW(4000)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE &quot;USERS&quot; 
 
 

SQL&gt; declare
  2    raw4000 raw(4000) := hextoraw(lpad('0',8000,'0'));
  3  begin
  4    dbms_output.put_line(utl_raw.length(raw4000));
  5    insert into T4000 values (raw4000);
  6  end;
  7  /
 
PL/SQL procedure successfully completed
 
SQL&gt; select utl_raw.length(xxx) from T4000;
 
UTL_RAW.LENGTH(XXX)
-------------------
               2000
               4000
</pre>
]]></content:encoded>
	</item>
</channel>
</rss>
