Oracle 选择*返回CLOB
我以前没有使用过oracle,我需要修改clob数据,因为它有我的家庭电话号码。但当我执行Oracle 选择*返回CLOB,oracle,clob,Oracle,Clob,我以前没有使用过oracle,我需要修改clob数据,因为它有我的家庭电话号码。但当我执行select*from时,表格显示CLOB,我看不到数据。如何查看数据以及如何更新 我需要查询。在PL/sqldeveloper中,选择ROWID以及表列: SELECT t.*, t.rowid FROM mytable t 这将允许您编辑表的数据 然后只需检查CLOB字段附近的..按钮并编辑它 您可以从文件中加载,也可以只在编辑字段中键入。在代码中 Java(更新名为dbo的对象中作为字段保存
select*from
时,表格显示CLOB
,我看不到数据。如何查看数据以及如何更新
我需要查询。在
PL/sqldeveloper
中,选择ROWID
以及表列:
SELECT t.*, t.rowid
FROM mytable t
这将允许您编辑表的数据
然后只需检查CLOB
字段附近的..
按钮并编辑它
您可以从文件中加载,也可以只在编辑字段中键入。在代码中
Java(更新名为dbo的对象中作为字段保存的CLOB字段):
其中writeClob()是:
有时我想知道为什么该死的Oracle驱动程序本身无法检测到字段是CLOB,而只是透明地处理ps.setString(“非常长的值”);它本身这就是有人回答说“为什么不使用Oracle LOB Java实用程序方法?!”的地方,我从来都不知道这些…您使用的是旧版本的sqlplus吗
如果您使用的是SQLDeveloper,只需将网格的列加宽即可 您使用什么工具来执行查询?sqlplus将把select从clob列截断为参数long的值。如果您使用的是sqlplus,那么将long设置为一个足够大的值,以容纳clob,然后执行一个简单的选择应该会返回数据。CLOB只是文本,因此可以像查询表中的任何其他列一样进行查询。如果您使用的是sqlplus,并且它不返回任何内容而不是部分内容,那么请确保填充了表中的列 我正在使用dbVisualizer,我做了一次定期更新,它成功了。感谢MichaelN告诉我们CLOB只是文本,所以可以像查询表中的任何其他列一样进行查询。这帮助我在几分钟内解决了问题。我为您介绍了我的方法:这是pl/sql中的一个示例。您可以创建从clob读取的过程
Declare
Variableclob Clob;
Temp_Save Varchar2(32767);
index_pass number;
Begin
For I In (select id_reporte from reporte where id_reporte between 201 and 218)
Loop
Index_Pass:=To_Number(I.Id_Reporte);
Select Consulta Into Temp_Save From Reporte Where Id_Reporte=Index_Pass;
Variableclob:=To_Clob(Temp_Save);
Dbms_Output.Put_Line(Variableclob);
End Loop ;
End;
Remember to use:
set serveroutput on;
begin DBMS_OUTPUT.ENABLE(9999999999999); end;
在SQLDeveloper中,“打开”表。选择“数据”选项卡(这将检索所有数据)。然后在筛选栏(顶部)中,提供获取要更新的单行的条件。更新所需的列,然后提交更改。查询使用什么?SQL Developer?我使用
set long 4096
查看clob的前4096个字符。有助于调试sqlplus的问题。在PL/SQLDeveloper中,您可以使用:从mytable中选择*进行更新
protected boolean writeClob(oracle.sql.CLOB clob, String data) throws SQLException {
if (data == null) { return false; }
return writeClob(clob, data.toCharArray());
}
protected boolean writeClob(oracle.sql.CLOB clob, char[] data) throws SQLException {
if (data == null || clob == null) { return false; }
char[] buffer = new char[clob.getBufferSize()];
Writer os = clob.getCharacterOutputStream();
int len = -1;
CharArrayReader car = new CharArrayReader(data);
try {
while ((len = car.read(buffer)) != -1) {
os.write(buffer, 0, len);
os.flush();
}
} catch (IOException ioe) {
logger.error("IOException copying clob data into DB", ioe);
return false;
} finally {
try {
car.close();
os.close();
} catch (IOException ioe) {}
}
return true;
}
Declare
Variableclob Clob;
Temp_Save Varchar2(32767);
index_pass number;
Begin
For I In (select id_reporte from reporte where id_reporte between 201 and 218)
Loop
Index_Pass:=To_Number(I.Id_Reporte);
Select Consulta Into Temp_Save From Reporte Where Id_Reporte=Index_Pass;
Variableclob:=To_Clob(Temp_Save);
Dbms_Output.Put_Line(Variableclob);
End Loop ;
End;
Remember to use:
set serveroutput on;
begin DBMS_OUTPUT.ENABLE(9999999999999); end;