2

I have not used oracle before and I was to modify the clob data as it has my home phone number. But when I do select * from table shows CLOB and I cannot see the data. How can I see the data and how to I Update?

I need the query.

4

7 回答 7

3

PL/SQL Developer中,选择ROWID表格列:

SELECT  t.*, t.rowid
FROM    mytable t

这将允许您编辑表格的数据。

然后只需检查...该字段附近的按钮CLOB并进行编辑。

您可以从文件中加载它,也可以只在编辑字段中输入。

于 2009-04-06T16:11:48.983 回答
3

您使用什么工具来执行查询?sqlplus 会将 clob 列中的选择截断为参数 long 的值。如果您使用的是 sqlplus,则将 long 设置为足够大的值以容纳 clob,然后执行简单的选择应该返回数据。Clob 只是文本,因此可以像表中的任何其他列一样查询它。如果您使用的是 sqlplus 并且它不返回任何内容而不是部分返回,请确保已填充表中的列。

于 2009-04-06T19:37:35.307 回答
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;
}

有时我想知道为什么该死的 Oracle 驱动程序本身无法检测到一个字段是一个 CLOB 并且只是透明地处理 ps.setString("very long value"); 本身......这就是有人回答说“为什么不使用 Oracle LOB Java 实用程序方法?!”的地方 我从来不知道...

于 2009-04-06T16:27:34.437 回答
0

在 SQL 开发人员中,“打开”表。选择“数据”选项卡(这将检索所有数据)。然后在过滤器栏(顶部)中,提供您的条件以获取要更新的单行。更新所需的列,然后提交更改。

于 2013-07-29T19:27:39.497 回答
0

我正在使用 dbVisualizer 并且我进行了定期更新并且它有效。感谢 MichaelN 告知 Clob 只是文本,因此可以像表中的任何其他列一样查询它。这帮助我在几分钟内解决了我的问题。

于 2009-04-07T17:49:16.587 回答
0

您使用的是旧版本的 sqlplus 吗?

如果您使用的是 sql developer,只需使网格的列更宽。

于 2009-04-06T17:32:33.483 回答
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;
于 2012-11-01T18:50:46.850 回答