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 :?

38
demandé sur a_horse_with_no_name 2010-02-01 18:54:34

7 réponses

C'est ce qu'on appelle une variable bind dans Oracle.

Quel est le nom pour":"?

Deux points.

41
répondu OMG Ponies 2010-02-01 16:11:43

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.

49
répondu Jeffrey Kemp 2010-02-02 03:08:30

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.

6
répondu Will Vousden 2010-02-02 12:02:53

C'est un paramètre nommé.

En C#, vous préfixez le paramètre avec @ (Voir ici).

4
répondu kgiannakakis 2010-02-01 15:57:11

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.

3
répondu RAHUL 2012-01-04 14:32:12

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)

2
répondu Natty 2017-05-09 13:12:35

C'est aussi la syntaxe des paramètres pour une requête Delphi

1
répondu Leslie 2010-02-01 16:49:19