Visita il nuovo sito https://www.markonetools.it/system-naming-vs-sql-naming/.
Quando si esegue una istruzione SQL è importante impostare il naming (ovvero "convenzione di denominazione") corretta.
Cosa significa corretta? Dipende dal risultato che si vuole ottenere, quindi bisogna conoscere le differenze tra i due naming: system (*SYS) o SQL (*SQL).
Alcune differenze sono di carattere di nomenclatura, altre di sintassi e altre ancora (le più importanti a cui prestare attenzione) riguardano le autorizzazioni che verranno assegnate all'oggetto creato.
La convenzione di denominazione è una proprietà del driver JDBC/ODBC oppure una proprietà della sessione script SQL (strsql).
Molto sinteticamente si può dire che con il system naming il comportamente che si ottiene è paragonabile a quello che si otterrebbe utilizzando i comandi di sistema operativo (CRTLIB, CRTPF....). Invece l'SQL naming è conforme alle regole dello standard SQL comune a tutti i database.
Innanzitutto tra le due convenzioni esiste una differenza nei nomi con cui si identificano i vari tipi di oggetti.
La figura seguente mostra il parallelismo indicando brevemente il comando che si usa per generare l'oggetto.
Eseguendo le istruzioni SQL da diversi ambienti si può avere una convenzione di denominazione di default diverse.
Siccome le differenze più importanti tra i due naming riguarda la creazione degli oggetti, è bene controllare quale convenzione si stia adottando. Soprattutto nel caso in cui lo script SQL venga eseguito a volte p.es. utilizzando l'interfaccia STRSQL da 5250 oppure altre volte usando client SQL su PC che si collegano a IBM i tramite driver JDBC. In quest'ultimo caso la convenzione di denominazione di default é *SQL e quindi l'oggetto creato avrà proprietà diverse rispetto a quelli creati tramite STRSQL.
Questo capitolo è da leggere con attenzione perché l'assegnazione del proprietario e le autorizzazioni degli oggetti di database creati hanno parecchie differenze.
Con la convenzione di denominazione *SYS si ottiene un risultato analogo come se si creasse l'oggetto con i comandi "tradizionali" del sistema operativo (CRTLIB, CRTPF, CRTLF...) da un sorgente scritto con le DDS.
Nella figura seguente questo comportamente è evidenziato seguendo le linee verdi "equivalent".
Quindi se ci si trova in un ambiente misto dove i sorgenti degli oggetti di database sono scritti sia con DDS sia con SQL, al fine di mantenere un risultato uniforme sarebbe opportuno adottare la convenzione di denominazione *SYS.
NOTA BENE: con la convezione di denominazione SQL bisogna porre attenzione anche al caso in cui si stia creando uno schema o un oggetto all'interno di uno schema il cui nome corrisponde con un nome di profilo utente esistente su IBM i.
Così come per gli oggetti di database (illustrati al paragrafo precedente) anche per le procedure/funzioni e trigger SQL esistono delle differenze nell'assegnazione del proprietario e delle autorizzazioni agli oggetti creati.
NOTA BENE: con la convezione di denominazione SQL bisogna porre attenzione anche al caso in cui si stia creando un oggetto all'interno di uno schema il cui nome corrisponde con un nome di profilo utente esistente su IBM i.
Bibliografia