copiar long raw
-
- Rank: Analista Pleno
- Mensagens: 110
- Registrado em: Ter, 24 Mai 2005 9:16 pm
- Localização: Dongguan - Guangdong - China
tenho uma tabela q tem o campo long raw, e dentro desse campo esta armazenado figuras, porem tenho outra tabela parecida q tb tenho um campo long raw, o que preciso fazer é passar as figuras q estao armazenadas na tabela 1, para a tabela 2, porem estou tendo difuculdades para lhe dar com os campos long raw, alguém sabe como posso resolver isso ??
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
faz um INSERT!
Exemplo:
aí vai um link
http://glufke.net/oracle/viewtopic.php?t=154
Exemplo:
INSERT INTO tab1 (campo_long) (select campo_long from tabela2)
http://glufke.net/oracle/viewtopic.php?t=154
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Seg, 06 Mar 2006 8:42 am
- Localização: Maceió/AL
[Gerson Júnior]
Caro Dr_Gori, isso aí de fato funciona, porém apenas para campos Blob, não para long raw. Estou com a mesma dificuldade do amigo, fazer cópia de campo long raw, porém não consegui encontrar uma solução ainda. Valeu pela dica, mas infelizmente ela não funciona.
- dr_gori
- 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
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Na verdade, se você está usando o banco 8 ou superior, você não deveria estar usando LONG RAW. Ele ainda existe apenas para fins de compatibilidade. Você deveria estar usando um BLOB! (daí funciona da forma que foi indicada)
Para copiar de uma tabela pra outra um campo LONG RAW apenas com pl/sql, é meio complicado:
* faça um export da tabela.
* renomeie a tabela para o nome desejado usando o comando RENAME
* faça o import que você recem criou...
Veja o que o Tom Kyte fala a respeito:
http://asktom.oracle.com/pls/ask/f?p=49 ... 8223421081
Este cursor pode ser usado caso o long raw tenha até 32k
Esta rotina é feita em JAVA, mas creio que não está 100% testada.
Para copiar de uma tabela pra outra um campo LONG RAW apenas com pl/sql, é meio complicado:
* faça um export da tabela.
* renomeie a tabela para o nome desejado usando o comando RENAME
* faça o import que você recem criou...
Veja o que o Tom Kyte fala a respeito:
http://asktom.oracle.com/pls/ask/f?p=49 ... 8223421081
Este cursor pode ser usado caso o long raw tenha até 32k
DECLARE
CURSOR MyCursor IS SELECT Field1, Field2, RawField FROM Table1;
vField1 integer;
vField2 varchar2(50);
vRawField long raw;
iCount integer;
BEGIN
iCount := 0;
OPEN MyCursor;
LOOP
FETCH MyCursor INTO vField1, vField2, vRawField;
EXIT WHEN MyCursor%NOTFOUND;
iCount := iCount + 1;
INSERT INTO Table2 (T2Field1, T2Field2, T2RawField)
VALUES (vField1, vField2, vRawField);
--Commit every 10 rows
IF iCount = 10 THEN
iCount := 0;
COMMIT;
END IF;
END LOOP;
COMMIT;
CLOSE MyCursor;
END;
Esta rotina é feita em JAVA, mas creio que não está 100% testada.
ops$tkyte@ORA9IR2> create or replace and compile java source named "long_raw" as
2 import java.io.*;
3 import java.lang.*;
4 import java.sql.*;
5 import java.util.*;
6 import oracle.jdbc.driver.*;
7 import java.math.*;
8
9 public class long_raw
10 {
11 public static java.math.BigDecimal getlength(java.lang.String p_query,
oracle.sql.ARRAY p_binds) throws Exception
12 {
13 int length;
14 int tot_length = 0;
15 Connection conn =
DriverManager.getConnection("jdbc:default:connection:");
16 PreparedStatement pstmt = conn.prepareStatement(p_query);
17 String[] binds = (String[])p_binds.getArray();
18 for( int i = 0; i < p_binds.length(); i++ )
19 {
20 pstmt.setString( i+1, binds[i] );
21 }
22 ResultSet rset = pstmt.executeQuery();
23
24 if ( rset.next() )
25 {
26 InputStream is = rset.getBinaryStream(1);
27 byte buffer[] = new byte[1024];
28 while ((length = is.read (buffer,0,1024)) != -1)
29 tot_length += length;
30 is.close();
31 }
32 rset.close();
33 pstmt.close();
34 return new java.math.BigDecimal( tot_length );
35 }
36 }
37 /
Java created.
ops$tkyte@ORA9IR2> show error
No errors.
ops$tkyte@ORA9IR2>
ops$tkyte@ORA9IR2>
ops$tkyte@ORA9IR2> create or replace function long_raw_length( p_query in
varchar2, p_binds in strArray ) return number
2 as language java
3 name 'long_raw.getlength( java.lang.String, oracle.sql.ARRAY ) return
java.math.BigDecimal';
4 /
Function created.
ops$tkyte@ORA9IR2>
ops$tkyte@ORA9IR2> drop table t;
Table dropped.
ops$tkyte@ORA9IR2> create table t ( x int, y int, z long raw );
Table created.
ops$tkyte@ORA9IR2> insert into t values ( 1, 2, '0a0a0a0a' );
1 row created.
ops$tkyte@ORA9IR2>
ops$tkyte@ORA9IR2> select x, y, long_raw_length('select z from t where x = ? and
y = ?', strArray(x,y) ) lrl
2 from t;
X Y LRL
---------- ---------- ----------
1 2 4
ops$tkyte@ORA9IR2>
ops$tkyte@ORA9IR2> select max( long_raw_length('select piece from sys.idl_ub1$
where obj#=to_number(?) and part=to_number(?) and
2 version=to_number(?) and piece# = to_number(?)',
strArray(obj#,part,version,piece#) ) ) from sys.idl_ub1$;
MAX(LONG_RAW_LENGTH('SELECTPIECEFROMSYS.IDL_UB1$WHEREOBJ#=TO_NUMBER(?)ANDPART=T
-------------------------------------------------------------------------------
32767
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Qui, 17 Mar 2022 3:54 pm
- Localização: Guarapuava/PR
Assim:
INSERT INTO tab1 (campo_long) (select to_lob(campo_long) from tabela2)
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes