es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar parámetros con el mismo nombre en formularios HTML y PL/SQL.

PL/SQL DESARROLLADOR<------->versión: 10.0.5.1710

Cuando usamos owautil.choosedate, se generan tres etiquetas de selección con el mismo nombre….

htp.formopen(curl => 'package.procedure_prube');
owa_util.choose_date(p_name => 'date');
htp.formsubmit(cvalue => 'send');
htp.formclose;

Si, por ejemplo, el procedimiento procedure_prube tiene esta estructura para imprimir las tres opciones seleccionadas en la siguiente página web….

procedure procedure_prube(date in varchar2)
as
begin
htp.htmlopen;
htp.p('<p>'||date||'</p>');
htp.htmlclose;
end procedure_prube;

Este código sólo imprime la primera opción.

Sé que cuando el usuario presiona el botón de enviar, si el método del formulario es “get”, la URL tiene esta estructura….

http://localhost/nombre_dad/package.procedure_prube?date=12&date=jen&date=2021

                                                -------------------------------
                                                            query

La consulta tiene tres parámetros con el mismo nombre y Oracle captura el primero, descartando los demás. Este es el problema que no puedo resolver.



ESTA ES OTRA PREGUNTA SIMILAR

¿Existe algún método para capturar algún parámetro no definido en el procedimiento? por ejemplo

consulta—->param1=patata&param2=tomate&param3=zanahoria

 procedure procedure_prube(param1 in varchar2,param2 in varchar2)
    as
    begin
    htp.htmlopen;
    htp.p('<p>'||param1||'</p>');
    htp.p('<p>'||param2||'</p>');
    **--Quiero imprimir el param3**
    htp.htmlclose;
    end procedure_prube;

Gracias por su atención.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para la primera pregunta, el problema es que al usar el mismo nombre para múltiples etiquetas de selección (select tags), solo se captura el primer valor en Oracle. Una solución para esto sería utilizar nombres diferentes para cada etiqueta de selección y luego manejarlos por separado en el procedimiento. Por ejemplo, el código podría modificarse de la siguiente manera:

    htp.formopen(curl =>'package.procedure_prube');
    owa_util.choose_date(p_name => 'date1');
    owa_util.choose_date(p_name => 'date2');
    owa_util.choose_date(p_name => 'date3');
    htp.formsubmit(cvalue => 'send');
    htp.formclose;
    

    Y luego, en el procedimiento, cada parámetro podría ser manejado por separado:

    procedure procedure_prube(date1 in varchar2, date2 in varchar2, date3 in varchar2)
    as
    begin
    htp.htmlopen;
    htp.p('<p>'||date1||'</p>');
    htp.p('<p>'||date2||'</p>');
    htp.p('<p>'||date3||'</p>');
    htp.htmlclose;
    end procedure_prube;
    

    Para la segunda pregunta, si el número de parámetros es indefinido, un enfoque sería utilizar la función owa_util.get_cgi_env para obtener todos los parámetros en una tabla y luego recorrer la tabla para procesar cada uno. Por ejemplo:

    procedure procedure_prube
        as
        l_params owa.vc_arr;
        begin
        l_params := owa_util.get_cgi_env();
        htp.htmlopen;
        for i in 1..l_params.count loop
            htp.p('<p>'||l_params(i)||'</p>');
        end loop;
        htp.htmlclose;
        end procedure_prube;
    

    Este código imprimirá todos los parámetros pasados en la cadena de consulta. Sin embargo, es importante tener en cuenta que este enfoque podría crear vulnerabilidades de seguridad, ya que permite a los usuarios pasar parámetros arbitrarios que pueden no ser esperados o validados. Por lo tanto, se debe utilizar con precaución y se deben implementar medidas de validación de entrada adecuadas.

Comments are closed.