Domanda

So che la domanda potrebbe sembrare troppo stupido, ma non ho mai capito questa parte.

SQL * Plus funziona sia con SQL e PL / SQL. Come faccio a sapere se un po ' il codice è SQL o PL / SQL? Se il mio codice ha un ciclo for, non è forse SQL più?

PL / SQL è un'estensione per SQL per avere cicli, condizionali ecc Poi qualsiasi SQL il codice è di default il codice PL / SQL? non è così?

C'è una demarcazione tra SQL e PL / SQL?

Due esempi di differenziare b / w SQL e PL / SQL che triggerred questa domanda:

Qual è la differenza tra questi due istruzioni CREATE tABLE?

https://stackoverflow.com/questions/2267386/oracle-11g -varray-di-oggetti / 2267813 # 2.267.813

È stato utile?

Soluzione

La sua una questione interessante, per essere sicuri. La maggior parte delle persone che hanno familiarità con lo sviluppo Oracle non darebbero un pensiero, ma quando si arriva al dunque, la sua a volte confondendo per definire la demarcazione tra SQL e PL / SQL.

Per guardando la definizione delle sigle, si inizia ad avere un'idea di quali aree di funzionalità ciascuno comprende:

SQL - Structured Query Language

PL / SQL - Procedural Language / Structured Query Language

L'attento preavviso lettore potrebbe come SQL si presenta due volte 8) Questo perché SQL è spesso inserita all'interno PL / SQL - PL / SQL è un linguaggio che è stato fatto per fornire un esclusivo 4th generazione (4GL) che svolge molto bene con gli oggetti di database in Oracle.

Wikipedia ha qualche materiale piuttosto bene su entrambi SQL e PL / SQL

La parte di confusione è dove PL / SQL e SQL si sovrappongono un po '. competenza di SQL include Inserisci dati, interrogare, aggiornare e cancellare, la cosiddetta LMD, o le operazioni di manipolazione dei dati linguistici, ma include anche creare, modificare, rinominare, goccia che sono operazioni DDL o Data Definition Language. Il suo qui dove alcuni potrebbero confondersi. L'operazione per creare una stored procedure, qualcosa di scritto utilizzando PL / SQL, SQL è in realtà -. Si utilizza SQL per creare l'oggetto di database che rappresenta un blocco di PL / SQL

codice SQL Allo stesso modo, è possibile incorporare all'interno del vostro PL / SQL. Un ciclo per in PL / SQL può essere basata su una query SQL, per esempio. Soffia la mente un po ', eh? Si crea una procedura utilizzando SQL che utilizza in realtà internamente SQL per eseguire una certa azione sul record dal database.

Cool stuff se mi chiedete.

Altri suggerimenti

Se è avvolto in

  • BEGIN ... END
  • DECLARE ... END
  • CREATE OR REPLACE ... END
  • È un one-liner prefissato EXECUTE

Allora è PL / SQL. Che cosa significa questo sotto il cofano? SQL viene "compilato" ad un piano di query ed eseguito, immediatamente restituendo un set di risultati nel caso di SELECT o il numero di righe interessate in altri casi, o un errore. PL / SQL, tuttavia, è più coinvolto. Ogni oggetto si fa riferimento in esso viene controllato per l'esistenza e le sovvenzioni necessarie, poi il PL / SQL viene compilata fino a quasi native codice , che esegue a piena velocità. Le dipendenze sono monitorati e se una tabella cambia, allora qualsiasi PL / SQL fa riferimento a esso richiede la ricompilazione. La ragione di questo è la velocità; dal momento che tutto è fatto in anticipo al momento della compilazione, non c'è bisogno di avere alcun controllo runtime in PL / SQL, mentre le istruzioni SQL devono essere controllati ogni volta (anche tho' interrogazione piani vengono memorizzati nella cache, il cosiddetto soft parse , privilegi devono ancora essere controllati, e anche un parse morbido ha un costo associato con esso).

Questo è uno dei "vantaggi killer" di stored procedure Oracle li fa; in realtà l'esecuzione di un proc PL / SQL memorizzato o un trigger fa la quantità minima assoluta di calcolo per ottenere il risultato. Il codice dell'applicazione in esecuzione all'esterno del kernel di Oracle in cui è attendibile deve saltare attraverso cerchi più al fine di ottenere i dati. E 'lo stesso argomento per fortemente tipizzato, lingue referenzialmente trasparente ad alto livello, come OCaml o Haskell - fare più lavoro una volta, al momento della compilazione, e raccogliere i frutti sui milioni di volta che viene eseguito il codice.

C'è una demarcazione tra SQL e PL / SQL?

SQL è un * standard.

PL / SQL è un fornitore estensione del * standard SQL.

* SQL è un linguaggio che ha una grammatica esplicita e le regole per come dovrebbe essere attuato che la grammatica, ed è , ma non è uno standard per-sé . Tuttavia, in quanto non v'è una specifica lingua, che tutti possono concordare, quindi qualsiasi cosa scritta in SQL sarebbe portatile se il programma è stato scritto solo in SQL.

Ma perché PL / SQL è un'estensione vendor, avrà parti di linguaggio che altri fornitori potrebbero non supportare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top