Que fait le signe deux-points": "dans une requête SQL?
Que signifie :
dans une requête?
INSERT INTO MyTable (ID) VALUES (:myId)
Comment récupère-t-il la valeur désirée?
Edit: aussi, comment s'appelle ce signe? Je voulais faire une recherche sur google, mais quel est le nom de :
?
7 réponses
Que signifie": "dans une requête?
Une variable de liaison . Les variables de liaison permettent de réutiliser plusieurs fois une seule instruction SQL (qu'il s'agisse d'une requête ou D'un DML), ce qui contribue à la sécurité (en interdisant les attaques par injection SQL) et aux performances (en réduisant la quantité d'analyse requise).
Comment récupère-t-il la valeur désirée?
Avant Qu'une requête (ou DML) ne soit exécutée par Oracle, votre programme créera un curseur. Votre programme émet le SQL pour être analysé pour ce curseur, il doit lier des valeurs pour chaque variable de liaison référencée par le SQL. Comment cela est fait dépend de la langue.
Comment s'appelle ce panneau?
Un deux-points.
Il s'agit d'une balise pour un paramètre de requête nommé, et ne fait pas partie de la syntaxe réelle de la requête. La balise est remplacée par une valeur spécifiée dans le code qui rend la requête avant qu'elle ne soit réellement exécutée.
Deux points :
est utilisé dans le langage de requête HQL Hibernate pour signifier qu'un paramètre est impliqué.
Donc ce que cela signifie est: SYNTAXE SQL:
SELECT * FROM EMPLOYEE WHERE EMP_ID = empID
Est identique à la syntaxe HQL:
SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID
empID
étant une variable locale pour les paramètres...
J'espère que cela aide.
Considérez les déclarations suivantes
select name from T_emp where id=1;
select name from T_emp where id=2;
select name from T_emp where id=3;
Chaque fois qu'une instruction est exécutée, Oracle vérifie les occurrences précédentes de la même requête. S'il trouve la même requête, il utilise le même plan d'exécution . Sinon, il doit trouver les différents chemins d'exécution, trouver le plan d'exécution optimal et l'exécuter.
Contrairement à l'humain, il n'est pas assez intelligent pour réaliser que seul l'id a changé(comme par exemple ci-dessus). Par conséquent, il passe par toutes les luttes et l'exécute.
Mais il existe un moyen de dire à Oracle que c'est une instruction similaire et qu'il peut utiliser le même plan d'exécution - BIND VARIABLE. Veuillez trouver l'exemple ci-dessous:
declare
v_id number;
v_name varchar2(30);
type c is ref cursor;
c1 c;
begin
for i in 1..100
loop
open c1 for 'select * from T_emp where id = :x' using i;
fetch c1 into v_name;
dbms_output.put_line('name is ' || v_name);
end loop;
END;
L'utilisation de variables de liaison aide à décupler les performances. PL / SQL utilise les variables de liaison seules (vous n'avez pas besoin de le dire explicitement)