2011-09-03 14 views

risposta

33

Le stored procedure sono una sequenza di istruzioni in linguaggio PL/SQL. È un linguaggio di programmazione implementato da alcuni DBMS, che consente di memorizzare sequenze di query applicate frequentemente al modello e condividere il carico di elaborazione con il livello dell'applicazione.

Le istruzioni preparate sono query scritte con segnaposto anziché valori effettivi. Si scrive la query e questa viene compilata solo una volta dal DBMS, quindi si passano semplicemente i valori da inserire nei segnaposto. Il vantaggio dell'utilizzo di istruzioni preparate consiste nel migliorare notevolmente le prestazioni e proteggere le applicazioni da SQL Injection.

La differenza è che non è possibile memorizzare istruzioni preparate. Devi "prepararli" ogni volta che devi eseguirne uno. Le stored procedure, d'altra parte, possono essere archiviate, associate a uno schema, ma è necessario conoscere PL/SQL per scriverle.

È necessario verificare se il DBMS li supporta.

Entrambi sono strumenti molto utili, si potrebbe voler combinare.

Spero che questa breve spiegazione ti sia utile!

10

Una stored procedure è memorizzata nel DB - a seconda di quale DB (Oracle, MS SQL Server ecc.) È compilato e potenzialmente preparato ottimizzato quando lo crei sul server ...

Una dichiarazione preparata è un'istruzione che viene analizzata dal server e un piano di esecuzione viene creato dal server pronto per l'esecuzione ogni volta che si esegue l'istruzione ... di solito ha senso quando una dichiarazione viene eseguita più di una volta ... a seconda del server DB (Oracle ecc.) e talvolta delle opzioni di configurazione queste "preparazioni" sono o specifiche della sessione o "globali" ...

Non c'è " scommessa "quando si confrontano questi due poiché hanno i loro casi d'uso specifici ...

0

Le altre risposte hanno accennato a questo, ma mi piacerebbe elencare i pro ei contro esplicitamente:

stored procedure

PRO:

  1. Ogni query viene elaborata più rapidamente rispetto a una query diretta, perché il server li precompila.
  2. Ogni query deve essere scritta solo una volta. Può essere eseguito tutte le volte che è necessario, anche tra sessioni diverse e connessioni diverse.
  3. Consente alle query di includere costrutti di programmazione (quali loop, istruzioni condizionali e gestione degli errori) che sono impossibili o difficili da scrivere in SQL.

CONS

  1. richiedono la conoscenza di qualsiasi linguaggio di programmazione server database utilizza.
  2. A volte è possibile richiedere autorizzazioni speciali per scriverli o chiamarli.

prepared statement

PROS

  1. routine memorizzate piace, sono veloci, perché le query sono pre-compilato.

CONS

  1. bisogno di essere ri-scritti con ogni connessione o sessione.
  2. Per essere degni del sovraccarico, ogni istruzione preparata deve essere eseguita più di una volta (ad esempio in un ciclo). Se una query viene eseguita solo una volta, più l'overhead va in preparazione dell'istruzione preparata di quando si torna indietro dal momento che il server deve compilare comunque l'SQL, ma anche fare la dichiarazione preparata.

Per i miei soldi, mi piacerebbe andare con stored procedure ogni volta in quanto hanno bisogno solo di essere scritta una sola volta. Dopodiché, ogni chiamata alla procedura porta all'ora salvata, indipendentemente dal fatto che tu stia o meno su una nuova connessione e che tu stia chiamando o meno la procedura in un ciclo. L'unico lato negativo è la necessità di dedicare un po 'di tempo all'apprendimento del linguaggio di programmazione. Se non avessi le autorizzazioni per scrivere stored procedure, userei una dichiarazione preparata, ma solo se dovessi ripetere ripetutamente la stessa query più volte nella stessa sessione.

Questa è la conclusione a cui sono giunto dopo diversi mesi di ricerca "off-and-on" sulle differenze tra questi due costrutti. Se qualcuno è in grado di correggere le cattive generalizzazioni che sto facendo, val la pena di perdere qualsiasi reputazione.

Problemi correlati