select *返回CLOB

时间:2009-04-06 16:01:45

标签: oracle clob

之前我没有使用过oracle而且我修改了clob数据,因为它有我的家庭电话号码。但当我select * from表显示CLOB时,我看不到数据。如何查看数据以及如何更新?

我需要查询。

7 个答案:

答案 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开发人员中,“打开”表。选择“数据”选项卡(这将检索所有数据)。然后在过滤器栏(顶部)中,提供您的条件以转到要更新的单行。更新所需的列,然后提交更改。