2010-10-22 3 views
1

Existe-t-il une fonction PL/SQL ou une technique générale permettant de citer des identifiants non qualifiés (par exemple, mytable) à utiliser dans une requête SQL construite dynamiquement? Que diriez-vous des identifiants partiellement ou entièrement qualifiés ([email protected])?Attribution d'un identifiant SQL dynamique dans PL/SQL

Considérons cet exemple artificiel:

CREATE PROCEDURE by_the_numbers(COL_NAME VARCHAR, INTVAL INTEGER) IS 
    ... 
BEGIN 
    -- COL_NAME is interpolated into SQL string 
    -- INTVAL gets bound to :1 
    stmt := 'SELECT * FROM tbl WHERE ' || COL_NAME || ' = :1'; 
    ... 
END 

... où nous ne voulons pas permettre l'injection naïve SQL dans COL_NAME (par exemple, une valeur de '1 = 1 ou 1').

+0

Vous avez un exemple de ce que vous essayez de faire? –

+0

@OMG Poneys, cet exemple clarifie-t-il? Fondamentalement, je veux un équivalent de la DBI de 'devis_identifier()' – pilcrow

+0

Mon expérience est que vous ne pouvez pas utiliser une variable BIND pour le nom de la colonne, car étant CHAR/VARCHAR il sera automatiquement entouré de guillemets simples pour protéger contre l'injection SQL . –

Répondre