Help!!数据转换过程中CLOB的问题!

[复制链接]
查看11 | 回复9 | 2012-5-15 15:24:11 | 显示全部楼层 |阅读模式
源表有10万记录左右,有两个long字段。目的表建了相应两个CLOB字段。
数据转换过程中,用PL/SQL块写循环每次插入1000条记录。但运行时出现以下错误,好像不认得TO_LOB()函数:
ORA-06550: line 13, column 2:
PLS-00201: identifier 'TO_LOB' must be declared
ORA-06550: line 2, column 3:
PL/SQL: SQL Statement ignored
但我把语句放出来,不用在PL/SQL块中,单句SQL在SQL PLUS里运行是成功的。
是为什么呀!
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
贴全好让大家测试。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
CREATE TABLE long_table (n NUMBER, long_col LONG);
CREATE TABLE lob_table (n NUMBER, lob_col CLOB);
在sqlplus里用这样的语句是成功的:
INSERT INTO lob_table
SELECT n, TO_LOB(long_col) FROM long_table;
已创建0行
但这样就失败了:
BEGIN
INSERT INTO lob_table
SELECT n, TO_LOB(long_col) FROM long_table;
END;
/
ERROR 位于第3行:
ORA-06550: line 3, column 13:
PLS-00201: identifier 'TO_LOB' must be declared
ORA-06550: line 2, column 1:
PL/SQL: SQL Statement ignored
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
可能不能用在过程里。
不过这种表估计不多,手工处理也不麻烦吧。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
begin
execute immediate 'INSERT INTO lob_table SELECT n, TO_LOB(long_col) FROM long_table' ;
end;
/
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
最初由 wawa 发布
[B]CREATE TABLE long_table (n NUMBER, long_col LONG);
CREATE TABLE lob_table (n NUMBER, lob_col CLOB);
在sqlplus里用这样的语句是成功的:
INSERT INTO lob_table
SELECT n, TO_LOB(long_col) FROM long_table;
已创建0行
但这样就失败了:
BEGIN
INSERT INTO lob_table
SELECT n, TO_LOB(long_col) FROM long_table;
END;
/
ERROR 位于第3行:
ORA-06550: line 3, column 13:
PLS-00201: identifier 'TO_LOB' must be declared
ORA-06550: line 2, column 1:
PL/SQL: SQL Statement ignored [/B]

首先,我建议你查一下 to_clob() 的帮助
其次,建议你用 insert into lob_table(n, lob_col ) as select n, to_lob(long_col) from long_table
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
解释一下

最初由 wawa 发布
[B]begin
execute immediate 'INSERT INTO lob_table SELECT n, TO_LOB(long_col) FROM long_table' ;
end;
/ [/B]

回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
最初由 jlandzpa 发布
[B]解释一下

[/B]

请查阅文档
to_clob()
to_lob()
写得很清楚了
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
我没有看清议题,不过我这里用
SQL> begin
2insert into t2(n, c) select n, to_lob(l) from t1;
3end;
4/
PL/SQL procedure successfully completed
没有报错呀!
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
是不是属于dynamic sql呢?
就好像PL/SQL里面不能直接运行DDL语句一样。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行