Oracle - Exteneder ServerOutPut

   
Vista:

Exteneder ServerOutPut

Publicado por Angel Ballesteros angel.grove@gmail.com (13 intervenciones) el 14/12/2015 22:34:06
Hola.

Quisiera saber si es posible extener el serverOutPut en Oracle, primeramente me gustaria saber como localizar el tamano actual y cuanto es lo maximo que puede alcanzar?

Este valor es aplicable a Oracle 11g Express Edition, o para nada?

Estoy tratando de crear un aplicacion que utilice google maps, localice direcciones en una base de datos y dibuje en el mapa, funciona bien, hasta que tiene que dibujar mas de 11 puntos en el mapa, donde se echa a perder completamente mostrando un error como :

ORA-06502 PL/SQL numeric o value error, character string buffer too small.

De antemano, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Exteneder ServerOutPut

Publicado por Rafael (177 intervenciones) el 15/12/2015 10:03:18
Hola:

Como no pones el codigo es dificil ayudarte o decirte donde esta el error pero aun asi por el mensaje puedo decirte que...

El error viene de la declaracion de la variable:
Ejemplo
1
2
3
4
5
6
7
CREATE OR REPLACE PROCEDURE TestProc
AS
v_number number(2);
BEGIN
v_number := 100;
END;
/

Esto te da dicho error por que el valor que asignas (100) es mayor a la capacidad de la variable que trata de almacenar (2)...

Luego entonces probablemente es como indicas en el output puedes ampliar dicho valor con
1
DBMS_OUTPUT.ENABLE(200000);

De acuerdo a la documentacion
Usage Notes

It is not necessary to call this procedure when you use the SET SERVEROUTPUT option of SQL*Plus.

If there are multiple calls to ENABLE, then buffer_size is the last of the values specified. The maximum size is 1,000,000, and the minimum is 2,000 when the user specifies buffer_size (NOT NULL).

NULL is expected to be the usual choice. The default is 20,000 for backwards compatibility with earlier database versions that did not support unlimited buffering.


Asi que si no lo has definido debe tener 20000, para ampliarlo lo maximo es un millon...

Si pones tu codigo y nos das mas pistas quizas podamos ayudarte mas y mejor.

Saludos

Pd. Si la info te sirve a mi me sirve un +1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exteneder ServerOutPut

Publicado por Angel Ballesteros (13 intervenciones) el 15/12/2015 16:18:26
Hola.

El codigo que estoy usando es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function render_google_map (
    p_region              in apex_plugin.t_region,
    p_plugin              in apex_plugin.t_plugin,
    p_is_printer_friendly in boolean )
    return apex_plugin.t_region_render_result
is
  cursor c_cmr is
    select cli_postal_address_1||', '||cli_city geoloc
    from   client
    where  cli_postal_address_1 is not null
    and cli_city='LONGUEUIL'
    and rownum<=40
    order by client_id;
  --
  l_width      apex_application_page_regions.attribute_01%type := p_region.attribute_01;
  l_height     apex_application_page_regions.attribute_02%type := p_region.attribute_02;
  l_code       varchar2(32000);
  i            number(3) := 0;
begin
  apex_javascript.add_library (
        p_name           => 'maps?file=api&v=2',
        p_directory      => 'http://maps.google.com/',
        p_version        => null,
        p_skip_extension => true );
  --
  sys.htp.p('<div id="'||p_region.static_id||'_map" style="width:'||l_width||'px; height:'||l_height||'px"></div>');
  --
  l_code := 'var map = null;
             var geocoder = null;
             if (GBrowserIsCompatible()) {
             map = new GMap2($x("'||p_region.static_id||'_map"));
             map.setCenter(new GLatLng(36.902466,-84.202881), 5);
             map.addControl(new GLargeMapControl());
             map.addControl(new GMapTypeControl());
             geocoder = new GClientGeocoder();';
  --
  for r_cmr in c_cmr
  loop
    l_code := l_code || 'geocoder.getLatLng(' ||''''||
                        r_cmr.geoloc ||''''||','||
                        'function(point) {
                         var baseIcon = new GIcon(G_DEFAULT_ICON);
                         baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
                         baseIcon.iconSize = new GSize(20, 34);
                         baseIcon.shadowSize = new GSize(37, 34);
                         baseIcon.iconAnchor = new GPoint(9, 34);
                         baseIcon.infoWindowAnchor = new GPoint(9, 2);
                         var letteredIcon = new GIcon(baseIcon);
                         letteredIcon.image = "http://www.google.com/mapfiles/marker'||chr(65+i)||'.png";
                         markerOptions = { icon:letteredIcon };
                         var marker = new GMarker(point,markerOptions);
                         map.addOverlay(marker);
                         });';
    i := i + 1;
  end loop;
  --
  l_code := l_code || '}';
  --
  apex_javascript.add_onload_code (p_code => l_code);
  --
  return null;
end render_google_map;

Estoy ussando un plugin dentro de google Apex para crear este mapa. En un ejemplo qu viene con el Apex 5, viene mas completo, aunque no he encontrado una guia de especificaciones de dicho ejemplo, pero el ejemplo funciona bien a menos de 20 puntos por mapa, si le pongo mas se revienta, mostrando el error antes mencionado.

He visto que google maps funciona muy bien, solo, cargando miles de puntos, sin embargo aqui entiendo que el mapa no carga por los bajos recursos asignados. El objetivo ronda el cargar cerca de 200 puntos por mapa, lo cual veo muy dificil.

Gracias Rafael por tu respuesta. Espero que el codigo pueda dar un mejor panorama.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Exteneder ServerOutPut

Publicado por Rafael (177 intervenciones) el 16/12/2015 08:48:17
El problema lo tienes al concatenar el lcode, que tienes definido a 32000 ...

No obstante lo maximo que puedes asignar es 32767...

Ahora bien otro problema que tienes es que concatenas muchos caracteres en "blanco"
1
2
3
4
5
6
l_code := l_code || 'geocoder.getLatLng(' ||''''||
                        r_cmr.geoloc ||''''||','||
                        'function(point) {var baseIcon = new GIcon(G_DEFAULT_ICON);baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";'||
                        'baseIcon.iconSize = new GSize(20, 34);baseIcon.shadowSize = new GSize(37, 34);baseIcon.iconAnchor = new GPoint(9, 34);'||
                        'baseIcon.infoWindowAnchor = new GPoint(9, 2);var letteredIcon = new GIcon(baseIcon);letteredIcon.image = "http://www.google.com/mapfiles/marker'||chr(65+i)||'.png";'||
                        'markerOptions = { icon:letteredIcon };var marker = new GMarker(point,markerOptions);map.addOverlay(marker);});';

Asi optimizarias algo tu espacio... no obstante creo aun asi muy pronto lo saturaras... bueno depende de las iteraciones que hagas o el resultado de tu cursor...

Ahora lo que entiendo que hace es cargar un codigo javascript y por cada registro del curso generas una nueva FUNCION con toda la definicion... Quizas lo mas conveniente seria que con los resultados de la funcion generaras una VARIABLE ARRAY, y que en una funcion recorrieras ese ARRAY, para ir ejecutando las Funcion de forma variable, con lo cual quizas podrias optimizar el tamaño de la salida...

No se si me explico...
Como sea creo que puedes tambien hacer esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function render_google_map (
    p_region              in apex_plugin.t_region,
    p_plugin              in apex_plugin.t_plugin,
    p_is_printer_friendly in boolean )
    return apex_plugin.t_region_render_result
is
  cursor c_cmr is
    select cli_postal_address_1||', '||cli_city geoloc
    from   client
    where  cli_postal_address_1 is not null
    and cli_city='LONGUEUIL'
    and rownum<=40
    order by client_id;
  --
  l_width      apex_application_page_regions.attribute_01%type := p_region.attribute_01;
  l_height     apex_application_page_regions.attribute_02%type := p_region.attribute_02;
  l_code       varchar2(32000);
  i            number(3) := 0;
begin
  apex_javascript.add_library (
        p_name           => 'maps?file=api&v=2',
        p_directory      => 'http://maps.google.com/',
        p_version        => null,
        p_skip_extension => true );
  --
  sys.htp.p('<div id="'||p_region.static_id||'_map" style="width:'||l_width||'px; height:'||l_height||'px"></div>');
  --
  l_code := 'var map = null;
             var geocoder = null;
             if (GBrowserIsCompatible()) {
             map = new GMap2($x("'||p_region.static_id||'_map"));
             map.setCenter(new GLatLng(36.902466,-84.202881), 5);
             map.addControl(new GLargeMapControl());
             map.addControl(new GMapTypeControl());
             geocoder = new GClientGeocoder();';
  apex_javascript.add_onload_code (p_code => l_code);
  --
  for r_cmr in c_cmr
  loop
    l_code := 'geocoder.getLatLng(' ||''''||
                        r_cmr.geoloc ||''''||','||
                        'function(point) {
                         var baseIcon = new GIcon(G_DEFAULT_ICON);
                         baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
                         baseIcon.iconSize = new GSize(20, 34);
                         baseIcon.shadowSize = new GSize(37, 34);
                         baseIcon.iconAnchor = new GPoint(9, 34);
                         baseIcon.infoWindowAnchor = new GPoint(9, 2);
                         var letteredIcon = new GIcon(baseIcon);
                         letteredIcon.image = "http://www.google.com/mapfiles/marker'||chr(65+i)||'.png";
                         markerOptions = { icon:letteredIcon };
                         var marker = new GMarker(point,markerOptions);
                         map.addOverlay(marker);
                         });';
    apex_javascript.add_onload_code (p_code => l_code);
    i := i + 1;
  end loop;
  --
  l_code := l_code || '}';
  --
  apex_javascript.add_onload_code (p_code => l_code);
  --
  return null;
end render_google_map;

Con lo cual vas traspasando el javascript por partes sin tener que saturar una variable... si no es posible.. hay que buscar otras alternativas.

Saludos
Pd. Si la info te sirve a mi me sirve un +1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Exteneder ServerOutPut

Publicado por Angel (13 intervenciones) el 17/12/2015 21:30:51
Muchas graicas por la ayuda en el codigo.

A diferencia de la vez anterior, la pagina logra cargar menos el area del mapa, donde solo se muestra un espacio en blanco. Ya antes habia tenido este error, sin embargo al no presentar mensaje alguno, me es dificil puntualizar que genera esto.

Tendre que cmbiar la forma en como se cargan las posiciones, pienso que podrai funcionar utilizar json en lugar de cargar los datos por medio de PL /SQL, o utilizr un array en lugar de eso, aunque los datos siempre vendria nde la base de datos.

Muchas graicas por la ayuda espero que me pueda echar la mano por si tengo otra duda.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar