Como saber se uma coluna Long raw esta contem valor?

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

Boa tarde galera.

Gostaria de sabe se alguém conhece uma forma de ver se uma tabela long raw tem valor. Tenho uma tabela onde algumas fotos foram vinculadas no campo long raw, porém preciso saber quantos vínculos existem.

Utilizo o Pl/Sql Developer.

Obrigado.
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

Obs: Coluna do tipo long raw.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

O ideal é nunca usar LONG RAW, converter tudo pra BLOB.
Mas se não tem como, acho que você terá que fazer uma function pra isso, pois não tem como usar IS NULL, LENGTH nesse tipo de campo. (nem mesmo DBMS_LOB.getlength)

Tente algo assim pra saber o TAMANHO:

Selecionar tudo

DECLARE
  LENGTH_VAR NUMBER;
  CURSOR T_CURSOR IS
    SELECT campo FROM SYS.IDL_UB1$ WHERE ... ;
  T_VAL T_CURSOR%ROWTYPE;
BEGIN
  OPEN  T_CURSOR;
  FETCH T_CURSOR INTO TOY_VAL;
  CLOSE T_CURSOR;

  LENGTH_VAR := LENGTH(T_VAL.campo);

  DBMS_OUTPUT.PUT_LINE('Tamanho: '||LENGTH_VAR); 
END;
Aqui tem uma função em JAVA que faz isso:
http://stackoverflow.com/questions/5497 ... a-long-raw

Selecionar tudo

SQL> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Raw" AS
  2  import java.io.*;
  3  import java.sql.*;
  4  import oracle.jdbc.driver.*;
  5  
  6  public class Raw {
  7  
  8     public static int getLength(int pk) throws SQLException,IOException {
  9  
 10        Connection conn = new OracleDriver().defaultConnection();
 11  
 12        PreparedStatement ps = conn.prepareStatement
 13           ( "SELECT my_long_raw_column FROM my_table WHERE id = ?" );
 14        ps.setInt( 1, pk);
 15        ResultSet rs = ps.executeQuery();
 16  
 17        int len = 0;
 18        if (rs.next()) {
 19           InputStream is = rs.getBinaryStream(1);
 20           int nb = is.read(new byte[1024]);
 21           while (nb>0) {
 22              len += nb;
 23              nb = is.read(new byte[1024]);
 24           }
 25        } else
 26           len = -1;
 27  
 28        return len;
 29     }
 30  }
 31  /

Java created
Chamada:

Selecionar tudo

SQL> CREATE OR REPLACE
  2  FUNCTION get_lr_length(p_id NUMBER) RETURN NUMBER
  3  AS LANGUAGE JAVA
  4  NAME 'Raw.getLength(int) return int';
  5  /

Function created

SQL> select get_lr_length(id) from my_table;

GET_LR_LENGTH(ID)
-----------------
                9
Se acharem uma forma melhor, poste aí !!!
Moloukos
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 54
Registrado em: Qui, 18 Set 2008 10:22 pm
Localização: São Paulo - SP
Moloukos Rox

O problema é o seguinte, tenho duas bases de dados distintas, porém com a mesma tabela, e nessa tabela tem um campo long raw.

Tentei fazer o export e depois usar o import de uma base de dados para outra, porém ele não leva a mesma imagem de uma base para outra.

Usei os recursos import/export do pl/sql Developer.

Alguém sabe uma maneira de fazer isso ou não tem jeito mesmo???
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

cara, usa o exp/imp do oracle,
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes