sql >> Database >  >> RDS >> Oracle

Hoe veel gebruikt worden Oracle-objecten?

Om te beginnen gebruiken sommige standaard Oracle-functionaliteit Types, bijvoorbeeld XMLDB en Spatial (waaronder het declareren van kolommen van geneste tabelgegevenstypen).

Ook gebruiken veel PL/SQL-ontwikkelaars voortdurend typen voor het declareren van PL/SQL-verzamelingen of pijplijnfuncties.

Maar ik ben het ermee eens dat maar weinig plaatsen Types uitgebreid gebruiken en er PL/SQL-API's van bouwen. Hier zijn verschillende redenen voor.

  1. Oracle heeft Objects erg langzaam geïmplementeerd. Hoewel ze werden geïntroduceerd in versie 8.0, was het pas in 9.2 dat ze volledige ondersteuning van Inheritance, Polymorphism en door de gebruiker gedefinieerde constructors. Goed objectgeoriënteerd programmeren is onmogelijk zonder deze functies. We hebben SUPER() . niet ontvangen tot versie 11g. Zelfs nu ontbreken er functies, met name de privéaangiften in het TYPE BODY.
  2. De syntaxis is vaak onhandig of frustrerend onduidelijk. De documentatie helpt niet.
  3. De meeste mensen die met Oracle werken, komen meestal uit de relationele/procedurele school van programmeren. Dit betekent dat ze OOP meestal niet begrijpen, of dat ze niet begrijpen waar het nuttig kan zijn bij het programmeren van databases. Zelfs als mensen met een leuk idee komen, vinden ze het moeilijk of onmogelijk om het te implementeren met behulp van de syntaxis van Oracle.

Dat laatste punt is het belangrijkste. We kunnen nieuwe syntaxis leren, we kunnen Oracle overtuigen om de functieset te voltooien, maar het is alleen de moeite waard als we een gebruik voor Types kunnen bedenken. Dat betekent dat we problemen nodig hebben die kunnen worden opgelost met behulp van overerving en polymorfisme.

Ik heb aan één systeem gewerkt dat veel gebruik maakte van typen. Het was een datawarehouse-systeem en het subsysteem voor het laden van gegevens was opgebouwd uit Types. De onderliggende reden was simpel:

  • we moeten dezelfde sjabloon voor bedrijfsregels toepassen voor elke tabel die we laden, dus het proces is generiek;
  • elke tabel heeft zijn eigen projectie, dus de SQL-instructies zijn voor elke tabel uniek.

De Type implementatie is schoon:het generieke proces is gedefinieerd in een Type; de implementatie voor elke tabel is gedefinieerd in een type dat van dat generieke type erft. De specifieke typen kunnen worden gegenereerd uit metadata. Ik heb een paar jaar geleden een presentatie gegeven over dit onderwerp op de UKOUG en ik heb het uitgebreider beschreven op mijn blog.Meer informatie.

Trouwens, relationele theorie omvat het concept van domeinen, dit zijn door de gebruiker gedefinieerde gegevenstypen, inclusief beperkingen, enz. Geen enkele smaak van RDBMS ondersteunt daadwerkelijk domeinen, maar de Type-implementatie van Oracle is zeker een stap op weg.



  1. Hoe de code in het javascript-bevestigingsvak uit te voeren

  2. Kan niet inloggen op SQL Server 2008 via het opdrachtregelprogramma

  3. Probleem met formulier verzenden... Toets invoeren

  4. MySQL Multi-Delete. Is het mogelijk om meerdere rijen waarnaar wordt verwezen te verwijderen?