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 parametrizar una sentencia SQL

Tengo una declaración como la siguiente:

CREATE OR REPLACE MASK IESWEBSERP.MASK_PWD_WSCONTROL 
ON IESWEBSERP.WSCONTROL
FOR COLUMN WSVNDPWD    
    RETURN                                         
        CASE   
            WHEN (VERIFY_GROUP_FOR_USER(SESSION_USER, 'xxx', 'xxxx') = 1)
                THEN WSVNDPWD                                                              
            WHEN (SESSION_USER IN ('QSQSRVR', 'QTMHHTTP', 'PROFOUNDJS', 'xxxx'))                  
                THEN WSVNDPWD  
            WHEN IESWEBSERP.IES_CHECK_AUTH(WSDTALIB) = 1        
                THEN WSVNDPWD
            WHEN (WSVNDID  = IESWEBSERP.web_login_id)
                THEN WSVNDPWD 
            ELSE 'MASKED'
    END                   

Estoy intentando parametrizar esto de una manera que me permita pasar un nombre de tabla y ejecutar esta declaración para esa tabla en particular. ¿Hay algún enfoque para hacer esto posible?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible parametrizar esta afirmación para que se pueda ejecutar para una tabla específica. Un enfoque sería utilizar un procedimiento almacenado que acepte el nombre de la tabla como parámetro y genere dinámicamente la declaración CREATE MASK utilizando el nombre de tabla pasado.

    Aquí hay un ejemplo de cómo podría ser el procedimiento almacenado:

    CREATE OR REPLACE PROCEDURE CREATE_MASK_FOR_TABLE (IN table_name VARCHAR(128))
    LANGUAGE SQL
    BEGIN
        DECLARE stmt VARCHAR(1000);
    
        SET stmt = 'CREATE OR REPLACE MASK IESWEBSERP.MASK_PWD_WSCONTROL 
                    ON IESWEBSERP.' || table_name || ' 
                    FOR COLUMN WSVNDPWD    
                    RETURN                                         
                        CASE   
                            WHEN (VERIFY_GROUP_FOR_USER(SESSION_USER, ''xxx'', ''xxxx'') = 1)
                                THEN WSVNDPWD                                                              
                            WHEN (SESSION_USER IN (''QSQSRVR'', ''QTMHHTTP'', ''PROFOUNDJS'', ''xxxx''))                  
                                THEN WSVNDPWD  
                            WHEN IESWEBSERP.IES_CHECK_AUTH(WSDTALIB) = 1        
                                THEN WSVNDPWD
                            WHEN (WSVNDID  = IESWEBSERP.web_login_id)
                                THEN WSVNDPWD 
                            ELSE ''MASKED''
                        END';  
    
        EXECUTE IMMEDIATE stmt;
    END
    

    Este procedimiento almacenado toma el nombre de una tabla como parámetro y genera dinámicamente la declaración CREATE MASK utilizando el nombre de tabla pasado. La declaración se ejecuta usando EXECUTE IMMEDIATE.

    Para ejecutar este procedimiento almacenado para una tabla específica, simplemente llámelo pasando el nombre de la tabla como parámetro:

    CALL CREATE_MASK_FOR_TABLE('WSCONTROL');
    

    Esto generará y ejecutará la declaración CREATE MASK para la tabla WSCONTROL.

    Tenga en cuenta que este es solo un enfoque para lograr la parametrización de la declaración. Puede haber otros enfoques que sean más adecuados dependiendo de sus requisitos y entorno.

Comments are closed.