2010-02-01 1 views
33

Cosa significa : in una query?Cosa fa il segno dei due punti ":" in una query SQL?

INSERT INTO MyTable (ID) VALUES (:myId) 

Come viene recuperato il valore desiderato?

Modifica: Inoltre, cos'è chiamato questo segno? Volevo cercare su google, ma come si chiama :?

+10

Si chiama "due punti", un ";" è un punto e virgola. –

risposta

36

Questo viene chiamato bind variable in Oracle.

qual è il nome per ":"?

Colon.

4

È un named parameter.

In C#, si precede il parametro con @ (vedere here).

+3

Questa non è una funzione di C#. È ADO.NET e può essere modificato. –

+0

+1 - ha molto più senso per me. –

6

Questo è un tag per un parametro di query denominato e non fa parte della sintassi effettiva della query. Il tag viene sostituito con un valore specificato nel codice che effettua la query prima dell'esecuzione effettiva.

0

che è anche la sintassi dei parametri per una query Delphi

44

Cosa fa ":" riposare per in una query?

A bind variable. Le variabili di binding consentono di riutilizzare più volte una singola istruzione SQL (se una query o DML), il che aiuta la sicurezza (non consentendo gli attacchi SQL injection) e le prestazioni (riducendo la quantità di analisi richiesta).

Come viene recuperato il valore desiderato?

Prima che una query (o DML) venga eseguita da Oracle, il programma creerà un cursore. Il programma invia l'SQL per essere analizzato per quel cursore, quindi deve associare i valori per ogni variabile di bind a cui fa riferimento l'SQL. Il modo in cui questo viene fatto dipende dalla lingua.

Come viene chiamato?

A due punti.

3

Colon : viene utilizzato in HQL Hibernate Query Language per indicare che è coinvolto un parametro.

Quindi, ciò significa: SQL sintassi:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID 

è stessa HQL sintassi:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID 

empID essendo variabile locale per i parametri ...

Spero che questo aiuti .

2

Considerate le seguenti dichiarazioni

select name from T_emp where id=1; 
select name from T_emp where id=2; 
select name from T_emp where id=3; 

Ogni volta che viene eseguita una dichiarazione, assegni Oracle per precedenti occorrenze della stessa query. Se trova la stessa query, utilizza lo stesso piano di esecuzione . In caso contrario, deve trovare i vari percorsi di esecuzione, elaborare il piano di esecuzione ottimale ed eseguirlo.

A differenza dell'umano, non è abbastanza intelligente da comprendere che solo l'ID è cambiato (come nell'esempio sopra). Quindi attraversa tutte le lotte e la esegue.

Ma c'è un modo per dire a Oracle che è una dichiarazione simile e che può utilizzare lo stesso piano di esecuzione - BIND VARIABLE. Si prega di trovare l'esempio di seguito:

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'utilizzo delle variabili di legatura aiuta a migliorare la prestazione di dieci volte. PL/SQL usa le variabili di binding da solo (non è necessario dirlo esplicitamente)