Inicio > Base de Datos, oracle, Programación > Procedimiento almacenado con consulta dinámica

Procedimiento almacenado con consulta dinámica

Esta vez me tocó investigar un poco respecto a consultas dinámicas y mis compañeros de trabajo me ayudaron mucho para armar mis procedimientos almacenados, aqui les suelto un codigo de ejemplo para que tengan una idea de lo que me refiero.

 CREATE PROCEDURE P_PRUEBA_CONSULTADINAMICA( p_estado_civil IN VARCHAR2,
                                            p_edad IN NUMBER,
                                            unCursor OUT CURSOR)
AS

    vc_sql VARCHAR2(4000);
    vc_where VARCHAR2(4000);

BEGIN

    -- ESCRIBIMOS LA SENTENCIA
    vc_sql := ' SELECT t.apepat ' || CHR(39) || ' ' || CHR(39) || ' t.nombre, t.edad ';
    vc_where := ' WHERE t.status = '|| CHR(39) || 'A' || CHR(39) || ' ' ;

    -- Si el estado civil ingresado no está vacío, buscará los registros con el estado civil indicado
    IF p_estado_civil IS NOT NULL THEN

        vc_where := vc_where || ' AND t.estcivil = ' || p_estado_civil;

    END IF;

    -- Asumiendo que nuestro formulario nos diera 0 para indicar todas las edades
    -- Si la edad ingresada no es igual a 0 busca solo los registros con la edad indicada
    IF NOT p_edad = 0 THEN

        vc_where := vc_where || ' AND t.edad = ' || p_edad;

    END IF;

    -- Concatenamos las cadenas
    vc_sql := vc_sql || vc_where;

    -- Poblamos el cursor de salida
    OPEN unCursor FOR vc_sql;

EXCEPTION
    WHEN OTHERS THEN
        RAISE;

END P_PRUEBA_CONSULTADINAMICA;

Como podrán aprenciar, la consulta que poblará mi cursor la almaceno dentro de una variable de tipo VARCHAR2, en caso de necesitar ‘comillas simples’ concateno la cadena con la función CHR(39), la cual me devuelve la comilla simple. Para armar mis condiciones voy evaluando segun mi necesidad los diferentes parámetros de entrada de mi procedimiento almacenado. Tomen en cuenta que uso ORACLE 8i.

  1. enero 7, 2008 a las 16:48

    Hola, espero que estes bien, mi consulta es la siguiente, generé un Procedimiento Almacenado en SQL Server 2000 en un servidor externo, lo que necesito saber es como puedo a través de Excel importar ese SP que cree, la idea es que en Excel me muestre la información generada por el SP de SQL.

    Ojala me puedas ayudar.

    Saludos.

  2. enero 11, 2008 a las 9:54

    Bueno, ante todo disculpa por la demora en responder. Lamentablemente, no hemos podido encontrar la forma de hacer lo que pides.

    Sabemos que podemos realizar consultas, pero no hemos podido verificar que se pueda importar datos a través de un SP.

    De todos modos disculpa por no poderte ayudar y por otro lado, gracias por entrar a mi blog.

  3. JAVA-BOY
    abril 22, 2008 a las 17:27

    mmm hola Lenny si lo q quieres es exportar con solo SQl pues va a estar un poco cañon pero si estas desarrollando te puedes apoyar de un lenguaje de programacion por ejemplo PHP q con solo unas 5 lineas puedes darle un formato de excel

  4. juan
    noviembre 3, 2008 a las 9:19

    me podes dar un ejemplo de consulta dinamica pero que requiera logica mas elaborada es decir con varias tablas en un join multiproposito ,basicamente intercambiar 2 joins cuando el parametro de 1 de las 3 tablas sea null

  5. Omarrpat
    enero 17, 2009 a las 12:25

    Es posible realizar una consulta SQl y en ella misma mandar llamar a un SP.

    Agradecere si me ayudas con esta duda.

  6. May 16, 2013 a las 2:56

    great points altogether, you just gained a logo new reader.

    What may you recommend about your post that you
    simply made some days in the past? Any sure?

  7. junio 2, 2013 a las 9:48

    Great article.

  8. febrero 24, 2017 a las 16:55

    estimado no puedo hacer esto para un procedimiento almacenado EXEC dbo.sp_traerdrenaje
    @mes = month(getdate()) que error existe

  1. febrero 3, 2015 a las 6:20

Replica a aapc coding exam Cancelar la respuesta