SQL ve PL / SQL arasında nasıl ayrım yapılır?


16

Sorunun çok aptalca gelebileceğini biliyorum, ama bu kısmı hiç anlamadım.

SQL * Plus hem SQL hem de PL / SQL ile çalışır. Bazı kodların SQL veya PL / SQL olup olmadığını nasıl bilebilirim? Kodumda bir for döngüsü varsa, artık SQL değil mi?

PL / SQL, döngü, koşul vb. İçin SQL'in bir uzantısıdır. O zaman herhangi bir SQL kodu varsayılan olarak PL / SQL kodudur? Öyle değil mi?

SQL ve PL / SQL arasında bir sınırlama var mı?

Bu soruyu tetikleyen s / b SQL ve PL / SQL'i ayırt etmenin iki örneği:

Bu iki create table ifadesi arasındaki fark nedir?

/programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

Yanıtlar:


12

Emin olmak için ilginç bir soru. Oracle geliştirmeye aşina olan çoğu insan ona bir fikir vermez, ancak ona geldiğinizde, bazen SQL ve PL / SQL arasındaki ayrımı tanımlamak kafa karıştırıcıdır.

Kısaltmaların tanımına bakarak, her birinin hangi işlevsellik alanlarını kapsadığı hakkında bir fikir edinmeye başlarsınız:

SQL - Yapısal Sorgu Dili

PL / SQL - Yordamsal Dil / Yapısal Sorgu Dili

Gözlemci okuyucu SQL'in iki kez nasıl göründüğünü fark edebilir 8) Bunun nedeni SQL'in genellikle PL / SQL içine gömülü olmasıdır - PL / SQL, veritabanı nesneleriyle çok iyi oynayan özel bir 4. nesil dil (4GL) sağlamak için yapılmış bir dildir . Oracle.

Vikipedi hem bazı oldukça iyi malzemeyi sahiptir SQL ve PL / SQL

Kafa karıştırıcı kısım PL / SQL ve SQL'in biraz üst üste geldiği yerdir. SQL'in purview'i, veri ekleme, sorgulama, güncelleme ve silme, sözde DML veya veri işleme dili işlemleri içerir, ancak aynı zamanda DDL veya veri tanımlama dili işlemleri olan oluşturma, değiştirme, yeniden adlandırma, bırakma işlemlerini de içerir. Burada bazı karışık olabilir. Bir saklı yordam oluşturma işlemi, PL / SQL kullanılarak yazılmış bir şey, aslında SQL - PL / SQL bloğunu temsil eden veritabanı nesnesi oluşturmak için SQL kullanın.

Benzer şekilde, SQL kodunu PL / SQL'inize gömebilirsiniz. Örneğin, PL / SQL'deki bir FOR döngüsü bir SQL sorgusunu temel alabilir. Aklını biraz uçuruyor, ha? Veritabanından kayıtlar üzerinde bazı eylemler gerçekleştirmek için SQL'i dahili olarak kullanan SQL kullanarak bir yordam oluşturursunuz.

Bana sorarsan harika şeyler.


2
Gerçekten, çizgi bulanık. İçinde SQL ifadesi bulunan bir PL / SQL işlevini çağıran bir SQL ifadesi bulunan bir PL / SQL prosedürü oluşturmak için bir SQL ifadesi yazabilirsiniz.
Leigh Riffel 20: 51'de

1
@ Gittiğimiz tavşan deliğine bakalım!
ScottCher

Çizginin hiç bulanık olduğunu söylemezdim. PL / SQL, SQL için yordamsal sarmalayıcıdır. Çoğu PL / SQL, SQL ifadeleri içerir, ancak zorunlu değildir. Gerçek SQL imleçleriniv$sql vb.
William Robertson

12

Sarılmışsa

  • BEGIN ... END
  • DECLARE ... END
  • CREATE OR REPLACE ... END
  • Tek astar önceden eklenmiş mi? EXECUTE

O zaman PL / SQL'dir. Bu, kaputun altında ne anlama geliyor? SQL bir sorgu planına "derlenir" ve yürütülür, hemen bir sonuç kümesi SELECTveya diğer durumlarda etkilenen satır sayısı veya bir hata döndürülür. Ancak PL / SQL daha çok işin içinde. İçinde başvurulan her nesnenin varlığı ve gerekli hibeler olup olmadığı kontrol edilir, daha sonra PL / SQL tam hızda çalışan neredeyse yerel koda derlenir . Bağımlılıklar izlenir ve bir tablo değişirse, o zaman herhangi bir PL / SQL referansı yeniden derleme gerektirir. Bunun nedeni hızdır; her şey derleme zamanında ön planda yapıldığından, PL / SQL'de herhangi bir çalışma zamanı kontrolüne gerek yoktur, oysa SQL ifadeleri her seferinde kontrol edilmelidir (sorgu planları önbelleğe alınmış olsa bile, yumuşak ayrıştırma olarak adlandırılır), ayrıcalıkların yine de kontrol edilmesi gerekir ve yumuşak ayrıştırmanın bile bununla ilişkili bir maliyeti vardır).

Bu, Oracle'ın yaptığı gibi saklı yordamların "katil avantajlarından" biridir; aslında bir PL / SQL saklı proc veya tetikleyici çalıştırmak sonucu elde etmek için mutlak minimum hesaplama yapar. Güvenilmeyen Oracle çekirdeğinin dışında çalışan uygulama kodu, verilere ulaşmak için daha fazla çembere atlamak zorundadır. OCaml veya Haskell gibi güçlü yazılan, referans olarak saydam yüksek düzeyli diller için aynı argüman - derleme zamanında bir kez daha fazla iş yapın ve kodun yürütüldüğü milyonlarca zamandan faydalanın.


2
Karışıma eklemek için CALL depolanmış bir program birimini yürütmek için kullanılan bir SQL ifadesidir ve başlık altında bir BEGIN olarak yeniden yazılmıştır ... END
Gary

2
EXECUTE olduğu gibi, sözdizimsel şeker
Gaius

5

SQL ve PL / SQL arasında bir sınırlama var mı?

SQL standarttır *.

PL / SQL, SQL standardının * bir tedarikçi uzantısıdır.

* SQL o gramer nasıl uygulanması gerektiğine ilişkin açık bir dilbilgisi ve kuralları vardır, bir dildir ve bir ama değil standart başına se . Ancak, herkesin kabul edebileceği bir dil belirtimi olduğundan, program yalnızca SQL'de yazılmış olsaydı SQL'de yazılan her şey taşınabilir olurdu.

Ancak PL / SQL bir satıcı uzantısı olduğundan, diğer satıcıların desteklemeyeceği dil bölümlerine sahip olacaktır.


3
Ben PL / SQL de facto standart olduğunu söyleyebilirim, oysa SQL de jure standart :-)
Gaius

3
@Gaius ve sadece bu ifadeden iki şeyi tahmin ederim: Bir ORA geliştiricisiniz ve
TSQL'in

@jcolebrand İlk DBA işim aslında Sybase üzerindeydi, ama haklısın, bugünlerde Oracle ile çalışıyorum. Her iki veritabanına da T-SQL veya PL / SQL yazabiliyorsanız çok mutlu olurum, ancak diller platformlarını yansıtır (örneğin, T-SQL, SQL Server'da ve onun alt öğelerinde imleçler ve kilitler pahalı olduğu için ve PL / SQL, Oracle'daki birinin DoD'da en son çalıştığı için böyle bir yöntemdir) :-)
Gaius

@Gaius Ah, evet, standartlarla ilgili eski argüman çok iyi çünkü seçim yapabileceğiniz çok şey var. SQL "standart" ve PL / SQL tescilli yani +1 @jcolebrand olduğunu belirtmek iyi olduğunu düşünüyorum.
ScottCher

@ScottCher ~ Bunun için teşekkürler. Bunun bir standart olduğunu söyleyerek aptal hissediyorum çünkü bir onay mührü ile damgalamak ve numara vermek için standart bir organ yok. Ancak iyi tanımlanmış ve üzerinde anlaşmaya varılmıştır. ;)
jcolebrand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.