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').
Vous avez un exemple de ce que vous essayez de faire? –
@OMG Poneys, cet exemple clarifie-t-il? Fondamentalement, je veux un équivalent de la DBI de 'devis_identifier()' – pilcrow
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 . –