web-dev-qa-db-fra.com

Que fait le signe deux-points ":" dans une requête SQL?

Qu'est-ce que : représente une requête?

INSERT INTO MyTable (ID) VALUES (:myId)

Comment récupère-t-il la valeur souhaitée?

Edit: Aussi comment s'appelle ce signe? Je voulais rechercher sur google, mais quel est le nom de :?

41
Jla

Cela s'appelle un variable de liaison dans Oracle.

quel est le nom de ":"?

Côlon.

45
OMG Ponies

Que signifie ":" dans une requête?

A variable de liaison . Les variables de liaison permettent à une seule instruction SQL (qu'il s'agisse d'une requête ou de DML) d'être réutilisée plusieurs fois, ce qui améliore la sécurité (en interdisant les attaques par injection SQL) et les performances (en réduisant la quantité d'analyse requise).

Comment récupère-t-il la valeur souhaité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 à analyser pour ce curseur, puis il doit lier des valeurs pour chaque variable de liaison référencée par le SQL. La manière de procéder dépend de la langue.

Comment s'appelle ce signe?

Un colon.

53
Jeffrey Kemp

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 effectue la requête avant qu'elle ne soit réellement exécutée.

6
Will Vousden

Colon : est utilisé dans HQL Hibernate Query Language pour signifier qu'un paramètre est impliqué.

Donc, cela signifie: SQL SYNTAX:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID

est identique à HQL SYNTAX:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID

empID étant une variable locale pour les paramètres ...

J'espère que cela t'aides.

6
RAHUL

C'est un paramètre nommé .

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

5
kgiannakakis

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 aux humains, il n'est pas assez intelligent pour réaliser que seul l'identifiant a changé (comme dans l'exemple ci-dessus). Elle passe donc par toutes les luttes et l'exécute.

Mais il existe un moyen de dire à Oracle qu'il s'agit d'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 Bind permet de décupler les performances. PL/SQL utilise les variables de liaison seules (vous n'avez pas besoin de le dire explicitement)

4
Natty

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

1
Leslie