Tipi Custom Database
Questa cartella contiene la documentazione di tutti i 10 tipi custom del database (esclusi i tipi PLJSON).
Tipi per Funzioni Pipelined
Questi tipi sono utilizzati dalle funzioni che ritornano tabelle (pipelined functions).
F_GET_OSPITI
| Tipo | Descrizione |
|---|---|
| T_DET_OSPITI_ROW | Tipo OBJECT per singola riga |
| T_DET_OSPITI_TAB | Tipo TABLE OF T_DET_OSPITI_ROW |
-- Struttura T_DET_OSPITI_ROW
CREATE TYPE T_DET_OSPITI_ROW AS OBJECT (
ID_EVENTO NUMBER,
TOT_ADULTI NUMBER,
TOT_KINDER NUMBER,
TOT_BABY NUMBER,
TOT_STAFF NUMBER,
TOT_INVITATI NUMBER,
NOTE_ADULTI VARCHAR2(1000),
NOTE_KINDER VARCHAR2(1000),
NOTE_BABY VARCHAR2(1000),
NOTE_STAFF VARCHAR2(1000)
);
-- Struttura T_DET_OSPITI_TAB
CREATE TYPE T_DET_OSPITI_TAB AS TABLE OF T_DET_OSPITI_ROW;
F_REP_ALLESTIMENTI
| Tipo | Descrizione |
|---|---|
| T_REP_ALLESTIMENTI_ROW | Tipo OBJECT per singola riga |
| T_REP_ALLESTIMENTI_TAB | Tipo TABLE OF T_REP_ALLESTIMENTI_ROW |
F_REP_CUCINA
| Tipo | Descrizione |
|---|---|
| T_REP_CUCINA_ROW | Tipo OBJECT per singola riga |
| T_REP_CUCINA_TAB | Tipo TABLE OF T_REP_CUCINA_ROW |
Tipi Utility
| Tipo | Descrizione |
|---|---|
| STRING_LIST | Tipo TABLE OF VARCHAR2 per liste stringhe |
| ENUM_TABLE_OBJECT | Tipo OBJECT per STRING_TO_TABLE_ENUM |
| ENUM_TABLE_TYPE | Tipo TABLE OF ENUM_TABLE_OBJECT |
| XLIB_VC2_ARRAY_T | Array di VARCHAR2 per XLIB |
Utilizzo in Query
-- Esempio uso F_GET_OSPITI
SELECT * FROM TABLE(F_GET_OSPITI(123));
-- Esempio uso STRING_TO_TABLE_ENUM
SELECT * FROM TABLE(STRING_TO_TABLE_ENUM('A:B:C', 0, ':'));
Migrazione .NET
In .NET i tipi Oracle pipelined vengono sostituiti con classi DTO e IEnumerable/IAsyncEnumerable.
Esempio T_DET_OSPITI_ROW → DTO
public class DettaglioOspitiDto
{
public int IdEvento { get; set; }
public int TotAdulti { get; set; }
public int TotKinder { get; set; }
public int TotBaby { get; set; }
public int TotStaff { get; set; }
public int TotInvitati { get; set; }
public string NoteAdulti { get; set; }
public string NoteKinder { get; set; }
public string NoteBaby { get; set; }
public string NoteStaff { get; set; }
}
Esempio F_GET_OSPITI → Metodo Service
public async Task<DettaglioOspitiDto> GetOspitiAsync(int idEvento)
{
var ospiti = await _context.EventiDetOspiti
.Where(o => o.IdEvento == idEvento)
.ToListAsync();
return new DettaglioOspitiDto
{
IdEvento = idEvento,
TotAdulti = ospiti.FirstOrDefault(o => o.CodTipoOspite == "8")?.Numero ?? 0,
TotKinder = ospiti.FirstOrDefault(o => o.CodTipoOspite == "5")?.Numero ?? 0,
TotBaby = ospiti.FirstOrDefault(o => o.CodTipoOspite == "6")?.Numero ?? 0,
TotStaff = ospiti.FirstOrDefault(o => o.CodTipoOspite == "7")?.Numero ?? 0,
TotInvitati = ospiti.Sum(o => o.Numero ?? 0),
NoteAdulti = ospiti.FirstOrDefault(o => o.CodTipoOspite == "8")?.Note,
NoteKinder = ospiti.FirstOrDefault(o => o.CodTipoOspite == "5")?.Note,
NoteBaby = ospiti.FirstOrDefault(o => o.CodTipoOspite == "6")?.Note,
NoteStaff = ospiti.FirstOrDefault(o => o.CodTipoOspite == "7")?.Note
};
}
Esempio STRING_TO_TABLE_ENUM → Extension Method
public static class StringExtensions
{
public static IEnumerable<string> ToTableEnum(this string input, char delimiter = ':')
{
if (string.IsNullOrEmpty(input))
yield break;
foreach (var item in input.Split(delimiter))
{
yield return item.Trim();
}
}
}
// Uso
var items = "A:B:C".ToTableEnum(':');