tipos tipo tamaño multiple maximo dinamico datos dato columns oracle plsql oracle10g long-integer varchar2

tamaño - Reemplazando varchar2 con un tipo de datos más grande en Oracle SP



varchar2 oracle (1)

El tipo de datos long está en desuso; si puede, debería considerar seriamente migrar su columna long a una clob .

Si estuvieras trabajando con un clob , podrías anexar el límite varchar2 32k de la siguiente manera:

declare l_clob clob; begin dbms_lob.createtemporary(l_clob, true); dbms_lob.open(l_clob, dbms_lob.lob_readwrite); dbms_lob.writeappend(l_clob, 4, ''1234''); for i in 1..10000 loop dbms_lob.writeappend(l_clob, 5, ''.5678''); end loop; dbms_output.put_line(''CLOB length: '' || length(l_clob)); dbms_lob.close(l_clob); dbms_lob.freetemporary(l_clob); end; / CLOB length: 50004

Puede agregar un long con el operador de concatenación || , pero como ya has visto, solo hasta 32k. No hay una manera fácil de manejar valores long por encima de eso dentro de PL / SQL. Es posible que pueda hacer algo con dbms_sql pero realmente no valdrá la pena el esfuerzo si existe la posibilidad de cambiar la columna de la tabla a una clob .

Si desea pasar el clob nuevamente a la persona que llama, y ​​es un clob temporal, tendrá que ser definido por la persona que llama y se le pasará después de que se haya creado:

create or replace procedure proc1 as l_clob clob; begin dbms_lob.createtemporary(l_clob, true); proc2(l_clob); dbms_output.put_line(''proc1 CLOB length: '' || length(l_clob)); dbms_lob.freetemporary(l_clob); end; / create or replace procedure proc2(p_clob in out clob) as begin dbms_lob.open(p_clob, dbms_lob.lob_readwrite); dbms_lob.writeappend(p_clob, 5, ''12345''); for i in 1..9999 loop dbms_lob.writeappend(p_clob, 5, ''.56789''); end loop; dbms_output.put_line(''proc2 CLOB length: '' || length(p_clob)); dbms_lob.close(p_clob); end; / exec procs; proc2 CLOB length: 50000 proc1 CLOB length: 50000

De lo contrario, el objeto no existirá en lo que respecta a la persona que llama.

Si existe el clob - seleccionado de una tabla, por ejemplo, para que no necesite la llamada createtemporary - entonces puede asignarlo a un parámetro out , pero no creo que sea el caso de lo que ha descrito.

Estoy usando Oracle verion 10. Hay un procedimiento almacenado en PL / SQL usando la variable varchar2. El código agrega constantemente la variable varchar2. Cuando el tamaño variable varchar2 excede 32767, no puede agregar más valor. Ahora quiero cambiar el tipo de datos a long o clob (para acomodar más caracteres), no funciona. ¿Cómo modificar el código aquí para tener la misma funcionalidad añadida con clob o long?

muestra que se agrega x: = x || ''mis datos'';