Stack Overflow em Português Asked by moises.santos on January 5, 2021
CREATE OR REPLACE FUNCTION PRC_HAM_CONVT_LONG_VARCHAR2
( p_owner VARCHAR2, p_tabela VARCHAR2, p_coluna VARCHAR2, p_rowid UROWID )RETURN VARCHAR2 IS
v_cursor INTEGER; --cursor
v_length INTEGER; --tamanho do long
v_tamanho INTEGER; --tamanho do que foi retornado
v_sql VARCHAR(2000); --stetament
v_max VARCHAR2(32760); --variavel varchar2 com tamanho maximo do long
v_clob CLOB; --variavel do tipo clob
v_long LONG; --variavel do tipo long
v_syscur SYS_REFCURSOR;
BEGIN
v_cursor := dbms_sql.open_cursor;
v_sql := 'SELECT '||p_coluna||' FROM '||p_owner||'.'||p_tabela||' WHERE ROWID = :row_id';
OPEN v_syscur FOR v_sql USING p_rowid;
FETCH v_syscur INTO v_long;
v_length := LENGTH(v_long);
CLOSE v_syscur;
dbms_sql.parse(v_cursor,v_sql,dbms_sql.NATIVE);
dbms_sql.bind_variable(v_cursor,'row_id',p_rowid);
dbms_sql.define_column_long(v_cursor,1);
IF(dbms_sql.execute_and_fetch(v_cursor) = 1) THEN
dbms_sql.column_value_long( v_cursor, 1, v_length, 0, v_max, v_tamanho );
END IF;
dbms_lob.createtemporary(v_clob, FALSE, dbms_lob.CALL);
v_clob := v_max;
RETURN v_max; --OU ENTAO V_MAX
END;
Com essa função acima do Oracle consigo converter uma coluna do tipo LONG normalmente para VARCHAR2, porém, existem casos em que o valor da coluna LONG ultrapassa a faixa permitida do VARCHAR2 o que inevitavelmente causa um erro, como eu poderia fazer para resolver esse problema? Ou seja, fazer com que todo o valor da coluna LONG seja convertida para VARCHAR2?
tl;dr
Acredito que não é possível.
varchar2
? Esse tipo armazena somente 4000 bytes1, enquanto o LONG
no máximo 2GB, logicamente a conversão iria perder dados, pois não "cabe" a quantidade de informações em um varchar2
.
Sugiro que:
varchar2
;
1 Tamanho máximo: 4000 bytes ou 32767 bytes se o MAX_STRING_SIZE
parâmetro de inicialização estiver definido como EXTENDED
. Fonte: Oracle - Datatype Limits 12c
Answered by David on January 5, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP