выберите * возвращает CLOB - PullRequest
2 голосов
/ 06 апреля 2009

Раньше я не пользовался оракулом, и мне нужно было изменить данные clob, так как у них есть номер домашнего телефона. Но когда я делаю select * from, таблица показывает CLOB, и я не могу видеть данные. Как я могу увидеть данные и как я могу обновить?

Мне нужен запрос.

Ответы [ 7 ]

3 голосов
/ 06 апреля 2009

Какой инструмент вы используете для выполнения запроса? sqlplus урезает select из столбца clob до значения параметра long. Если вы используете sqlplus, тогда установите long в достаточно большое значение для хранения clob, а затем просто выберите select, чтобы вернуть данные. Clob - это просто текст, поэтому его можно запрашивать, как и любой другой столбец в таблице. Если вы используете sqlplus и он ничего не возвращает вместо частичного, убедитесь, что столбец в таблице заполнен.

3 голосов
/ 06 апреля 2009

В PL/SQL Developer выберите ROWID вместе со столбцами таблицы:

SELECT  t.*, t.rowid
FROM    mytable t

Это позволит вам редактировать данные таблицы.

Затем просто нажмите кнопку ... возле поля CLOB и отредактируйте ее.

Вы можете загрузить его из файла или просто ввести в поле редактирования.

0 голосов
/ 29 июля 2013

В SQL разработчик, «Открыть» таблицу. Выберите вкладку «Данные» (это позволит получить все данные). Затем на панели фильтров (верхняя сторона) укажите критерии, по которым вы хотите перейти к отдельной строке, которую вы хотите обновить. Обновите необходимые столбцы и затем зафиксируйте изменения.

0 голосов
/ 01 ноября 2012

Я представляю свой подход к вашей ситуации: это пример в 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;
0 голосов
/ 07 апреля 2009

Я использую dbVisualizer, и я сделал регулярное обновление, и это сработало. Спасибо MichaelN за сообщение, что Clobs - это просто текст, поэтому его можно запрашивать, как и любой другой столбец в таблице. Это помогло мне исправить проблему за несколько минут.

0 голосов
/ 06 апреля 2009

Вы используете старую версию sqlplus?

Если вы используете sql developer, просто сделайте столбец сетки шире.

0 голосов
/ 06 апреля 2009

В коде?

Java (обновление поля CLOB, содержащегося как поле в объекте с именем dbo):

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 («очень длинное значение»); сам ... и это где кто-то отвечает: "Почему бы не использовать служебные методы Oracle LOB Java ?!" о котором я никогда не знал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...