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的对象中作为字段保存

我以前没有使用过oracle,我需要修改clob数据,因为它有我的家庭电话号码。但当我执行
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;