之前我没有使用过oracle而且我修改了clob数据,因为它有我的家庭电话号码。但当我select * from
表显示CLOB
时,我看不到数据。如何查看数据以及如何更新?
我需要查询。
答案 0 :(得分:3)
在PL/SQL Developer
中,选择ROWID
以及表格列:
SELECT t.*, t.rowid
FROM mytable t
这将允许您编辑表格的数据。
然后只需检查...
字段附近的CLOB
按钮并进行修改即可。
您可以从文件中加载它或只需输入编辑字段。
答案 1 :(得分:3)
您使用什么工具来执行查询? sqlplus将截断clob列中的select到参数long的值。如果你正在使用sqlplus,那么将long设置为足够大的值来保存clob,然后进行简单的select会返回数据。 Clobs只是文本,因此它可以像表中的任何其他列一样进行查询。如果您使用sqlplus并且它不返回任何内容,则确保填充表中的列。
答案 2 :(得分:0)
在代码中?
Java(更新作为名为dbo的对象中的字段保存的CLOB字段):
String sql = "SELECT clobby_wobby FROM table WHERE uuid = ? FOR UPDATE";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setLong(1, dbo.getUID());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB) ((OracleResultSet) rs).getClob(1);
failed = writeClob(clob, dbo.getClobbyWobby());
}
rs.close();
ps.close();
其中writeClob()是:
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;
}
有时我想知道为什么darned Oracle驱动程序本身无法检测到某个字段是CLOB并且只是透明地处理ps.setString(“非常长的值”);本身...这是有人回答说“为什么不使用Oracle LOB Java实用程序方法?!”我从来不知道...
答案 3 :(得分:0)
您使用的是旧版sqlplus吗?
如果您使用的是sql developer,只需将网格列更宽。
答案 4 :(得分:0)
我正在使用dbVisualizer并且我做了定期更新并且它有效。感谢MichaelN通知Clobs只是文本,因此它可以像表中的任何其他列一样进行查询。这帮助我在几分钟内解决了我的问题。
答案 5 :(得分:0)
我提出了适合你情况的方法:这是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;
答案 6 :(得分:0)
在SQL开发人员中,“打开”表。选择“数据”选项卡(这将检索所有数据)。然后在过滤器栏(顶部)中,提供您的条件以转到要更新的单行。更新所需的列,然后提交更改。