表 article 有一个info 大字段列,存储的文章的详细信息,现在要循环取出10条记录,并且包含大字段info的前100个字符如何写这个sql语句,并且操作以后能释放大字段的(游标或是指针)?现在用 SELECT * FROM v$open_cursor 查看打开的游标发现很多类似这样的东西table_4_200_76f3_0_0_0
table_4_2000_769c_0_0_0网上说是大字段周围的指针下面附网上的原文章,这样的问题应该如何排查呢?
V$OPEN_CURSOR中奇怪的项
为什么V$OPEN_CURSOR.SQL_TEXT以"table_4_xxxx_x_x_x_ x"的形式进行显示?V$OPEN_CURSOR中的多数项都与此类似。我的数据库客户机是Oracle8i 8.1.7版的JDBC瘦驱动程序,操作系统为Sun Solaris 8。例如:
select user_name, count(1) as count, sql_text
from sys.v_$open_cursor
group by user_name, sql_text
order by count;
USER_NAME COUNT SQL_TEXT
--------- ----- ---------------------
ORACLE 1 select user_name, ...
SGMASTER 1 SELECT PROPERTY_N...
SGMASTER 5 INSERT INTO ...
SGMASTER 7 table_4_200_5ee2_0_0_0
SGMASTER 12 table_4_2000_5ed8_0...
SGMASTER 12 table_4_200_5ed8_0_0_0
SGMASTER 12 table_e_400_5ed8_2_0_0
这些项与LOB周围的隐藏指针相连接。当你有一个为读/写而打开的LOB时,你会在V$OPEN_ CURSOR中发现这些神秘项中的一个。利用嵌套表也可以看到它们(在创建或访问时)。
在这种情况下,看起来似乎你的所有项都是LOB指针。带有TABLE_4_*的项表明打开的LOB是用于读取的,而带有TABLE_E_*的项表示打开的LOB是用于写入的。考虑清单 2中的例子,它是一个为读取而打开的LOB,而清单 3中的例子是为写入而打开的LOB。
在清单 3中以WRITE模式的例子可以看出,TABLE_E项出现了。有趣的是,SQL_TEXT中间的数字(在本例中为9912)实际上是以十六进制表示的包含LOB的表的OBJECT_ID号:
SQL> select object_name, object_type
2 from user_objects
3 where object_id = to_number('9912', 'XXXX');
OBJECT_NAME OBJECT_TYPE
----------- -----------
T TABLE
所以利用这些项不仅可以看到打开的LOB,还可以确定它们来自哪些表。
table_4_2000_769c_0_0_0网上说是大字段周围的指针下面附网上的原文章,这样的问题应该如何排查呢?
V$OPEN_CURSOR中奇怪的项
为什么V$OPEN_CURSOR.SQL_TEXT以"table_4_xxxx_x_x_x_ x"的形式进行显示?V$OPEN_CURSOR中的多数项都与此类似。我的数据库客户机是Oracle8i 8.1.7版的JDBC瘦驱动程序,操作系统为Sun Solaris 8。例如:
select user_name, count(1) as count, sql_text
from sys.v_$open_cursor
group by user_name, sql_text
order by count;
USER_NAME COUNT SQL_TEXT
--------- ----- ---------------------
ORACLE 1 select user_name, ...
SGMASTER 1 SELECT PROPERTY_N...
SGMASTER 5 INSERT INTO ...
SGMASTER 7 table_4_200_5ee2_0_0_0
SGMASTER 12 table_4_2000_5ed8_0...
SGMASTER 12 table_4_200_5ed8_0_0_0
SGMASTER 12 table_e_400_5ed8_2_0_0
这些项与LOB周围的隐藏指针相连接。当你有一个为读/写而打开的LOB时,你会在V$OPEN_ CURSOR中发现这些神秘项中的一个。利用嵌套表也可以看到它们(在创建或访问时)。
在这种情况下,看起来似乎你的所有项都是LOB指针。带有TABLE_4_*的项表明打开的LOB是用于读取的,而带有TABLE_E_*的项表示打开的LOB是用于写入的。考虑清单 2中的例子,它是一个为读取而打开的LOB,而清单 3中的例子是为写入而打开的LOB。
在清单 3中以WRITE模式的例子可以看出,TABLE_E项出现了。有趣的是,SQL_TEXT中间的数字(在本例中为9912)实际上是以十六进制表示的包含LOB的表的OBJECT_ID号:
SQL> select object_name, object_type
2 from user_objects
3 where object_id = to_number('9912', 'XXXX');
OBJECT_NAME OBJECT_TYPE
----------- -----------
T TABLE
所以利用这些项不仅可以看到打开的LOB,还可以确定它们来自哪些表。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货