sql >> Database teknologi >  >> RDS >> Oracle

Hvor udbredt er Oracle-objekter?

Til at begynde med bruger nogle standard Oracle-funktioner Typer, f.eks. XMLDB og Spatial (som inkluderer deklarering af kolonner med Nested Table-datatyper).

Mange PL/SQL-udviklere bruger også typer hele tiden til at deklarere PL/SQL-samlinger eller pipelinede funktioner.

Men jeg er enig i, at få steder bruger typer i vid udstrækning og bygger PL/SQL API'er ud af dem. Det er der flere grunde til.

  1. Oracle har implementeret objekter meget langsomt. Selvom de blev introduceret i version 8.0, var det først i 9.2, at de fuldt ud understøttede arv, polymorfi og brugerdefinerede konstruktører. Korrekt objektorienteret programmering er umulig uden disse funktioner. Vi fik ikke SUPER() indtil version 11g. Selv nu mangler der funktioner, især de private erklæringer i TYPE BODY.
  2. Syntaksen er ofte klodset eller frustrerende uklar. Dokumentationen hjælper ikke.
  3. De fleste mennesker, der arbejder med Oracle, har en tendens til at komme fra den relationelle/proceduremæssige programmeringsskole. Dette betyder, at de har en tendens til ikke at forstå OOP, eller at de ikke forstår, hvor det kan være nyttigt i databaseprogrammering. Selv når folk kommer med en god idé, finder de det svært eller umuligt at implementere ved hjælp af Oracles syntaks.

Det sidste punkt er det centrale. Vi kan lære ny syntaks, vi kan overtale Oracle til at fuldføre funktionssættet, men det er kun umagen værd, hvis vi kan finde på en brug for Types. Det betyder, at vi har brug for problemer, som kan løses ved hjælp af arv og polymorfi.

Jeg har arbejdet på et system, som brugte typer i vid udstrækning. Det var et datavarehussystem, og dataindlæsningsundersystemet var bygget ud af Typer. Den underliggende begrundelse var enkel:

  • vi skal anvende den samme forretningsregelskabelon for hver tabel, vi indlæser, så processen er generisk;
  • hver tabel har sin egen projektion, så SQL-sætningerne er unikke for hver enkelt.

Typeimplementeringen er ren:den generiske proces er defineret i en Type; implementeringen for hver tabel er defineret i en Type, som arver fra den generiske Type. De specifikke typer kan genereres ud fra metadata. Jeg præsenterede dette emne på UKOUG for et par år siden, og jeg har skrevet det mere detaljeret på min blog.Få mere at vide.

Relationel teori inkluderer i øvrigt konceptet Domains, som er brugerdefinerede datatyper, inklusive begrænsninger osv. Ingen variant af RDBMS understøtter faktisk Domains, men Oracles Typeimplementering er bestemt et skridt på vejen.



  1. Generer datointerval fra to datokolonner

  2. Sådan fungerer STRING_ESCAPE()-funktionen i SQL Server (T-SQL)

  3. De 5 bedste funktioner, som din SQL Server-database Ydelsesovervågningsplatform skal levere

  4. Hvordan kan jeg gruppere børn og forældre i en enkelt forespørgsel?