Oracle Lessons

Lezioni Pratiche in Italiano

Creato da Pietro_Bonfigli il 11/03/2009

Area personale

 

Tag

 

Archivio messaggi

 
 << Luglio 2024 >> 
 
LuMaMeGiVeSaDo
 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
 
 

Cerca in questo Blog

  Trova
 

FACEBOOK

 
 

Ultime visite al Blog

marcop1973pixfaxhellingen666RiukaTerzo_Blog.GiusFDMDMFqwerty_alnicola.cambaraFilippoPaganellifrancocapoluanadiciommoaleale78alebherryraffaelesoldanoio_brina
 

Chi puņ scrivere sul blog

Solo l'autore puņ pubblicare messaggi in questo Blog e tutti gli utenti registrati possono pubblicare commenti.
 
RSS (Really simple syndication) Feed Atom
 
 

 

Tasti Funzione

Post n°38 pubblicato il 17 Agosto 2011 da Pietro_Bonfigli
 

Effettuando il porting degli applicativi da Forms6 a Forms11 mi sono reso conto che gli utenti si trovavano a non poter più usare i tasti funzione come prima.

In effetti è necessario modificare il file fmrweb.res che si trova nella cartella
$Instance_homeconfigFormsComponentforms

ad esempio avevo

76   : 2 : "Ctrl+L"         : 29 : "List of Values"

dove 76 indica la codifica del tasto L, 2 indica che viene premuto assieme a Ctrl, e 29 è il codice della funzione.

L'ho modificato mettendo

120  : 0 : "F9"             : 29 : "List of Values"

per una lista completa del valore dei tasti

http://www.exploreoracle.com/2010/06/10/key-mapping-in-oracle-forms-10g-and-forms-11g/

 
 
 

Sito Utile

Post n°37 pubblicato il 21 Aprile 2011 da Pietro_Bonfigli

Vi segnalo questo sito dove potete trovare altro materiale utile

http://meotec.da.ru

 
 
 

Bug Forms 9i run_report_object

Post n°36 pubblicato il 21 Aprile 2011 da Pietro_Bonfigli
 

Vi segnalo un bug che ho riscontrato su Forms 9i.

Dopo una chiamata del run_report_object le chiamate dell'host non hanno più effetto.
In pratica il comando host viene ignorato e la cosa rimane costante fino a quando non si esce e si rientra nell'applicativo.

Ho trovato un rimedio effettuando nuovamente il login prima di ogni chiamata.

 
 
 

value too large for column

Post n°35 pubblicato il 06 Marzo 2011 da Pietro_Bonfigli
 

Programmando in Forms9 mi sono imbattuto due volte in questo tipo di errore ed ho deciso di pubblicare per evitare che altri si trovino nelle stesse difficoltà.

In pratica avevo questo messaggio di errore su una insert dove in realtà andavo ad inserire un valore nullo.
In realtà l'errore si crea quando si fanno delle insert in un loop su una tabella e si vanno ad alternare valori nulli e non nulli. Questo errore si può presentare anche andando in blocco.

La cosa più conveniente è riportare il codice su package e richiamare una funzione

 
 
 

Oracle Tipi Dati Astratti Lezione 7

Post n°34 pubblicato il 07 Settembre 2010 da Pietro_Bonfigli
 

Array Variabili.

Un Array Variabile consente di memorizzare attributi ripetuti di un record in un’unica riga. Per esempio si supponga di voler tener traccia degli attrezzi presi in prestito dai propri vicini. Possiamo definire la tabella PRESTITO:

create table PRESTITO

(Nome varchar(25),

NomeAttrezzo varchar(25),

constraint PRESTITO_PK primary key (Nome, Attrezzo));

Anche se il valore del campo NOME, che rappresenta il nome del vicino, non cambia, viene ripetuto in ogni record in quanto fa parte della chiave primaria.

I Collettori come gli Array Variabili consentono di ripetere solo i valori di colonna che cambiano, permettendo un potenziale risparmio di spazio sul disco.

I Collettori possono essere utilizzati per rappresentare in modo accurato le relazioni tra i tipi di dati negli oggetti del database.

  Creazione di un Array Variabile

Un Array Variabile può essere creato basandosi sia su un tipo di dati astratto, sia su uno dei tipi di dati standard di Oracle. Per esempio si potrebbe creare un nuovo tipo di dati, ATTREZZO_TY che possiede una solo colonna.

  Osservazione.

E’ opportuno limitare gli Array Variabili ad una solo colonna, per utilizzare più colonne si prenda in considerazione la possibilità di utilizzare le Tabelle Nidificate.

Create type ATTREZZO_TY as object

(NomeAttrezzo varchar(25));

Per creare un Array Variabile (cui verrà assegnato il nome ATTREZZI_VA), non è necessario creare prima il tipo base, in questo caso ATTREZZO_TY. Dato che l’array variabile si basa su un’unica colonna, è possibile creare il tipo ATTREZZI_VA in un unico passaggio. Per creare l’Array Variabile si utilizza la clausola as varray() del comando create type:

create or replace type ATTREZZI_VA

as varray(5) of varchar2(25);

Quando si esegue questo commando, viene creato un tipo di nome ATTREZZI_VA. La clausola as varray(5) comunica a Oracle la creazione di un array variabile contenente un massimo di cinque voci per record.

Con questo tipo di dati è possibile ridefinire la tabella PRESTITO:

 

create table PRESTITO

(Nome varchar(25),

Attrezzi ATTREZZI_VA,

constraint PRESTITO_PK primary key (Nome, Attrezzo)); 

Descrizione dell’ Array Variabile.

La tabella PRESTITO contiene un record per ciascuna persona che prende in prestito degli attrezzi, anche se questa persona ha in prestito più attrezzi.

Una desc sulla tabella restituisce:

Name Null? Type

------------------ -------------- ----------------------

NOME NOT NULL VARCHAR2(25)

ATTREZZI ATTREZZI_VA

Possiamo lanciare anche una select sulla tabella USER_TYPES :

select TypeCode,

Attributes

From USER_TYPES

Where Type_Name = ‘ATTREZZI_VA’;

e vengono restituite informazioni sul tipo (in questo caso il TypeCode è COLLECTION) oppure sulla tabella USER_COLL_TYPES che restituisce informazioni più dettagliate sui tipi.

  Inserimento di un record nell’ Array Variabile.

Per inserire un record in tabelle che utilizzano Array Variabili è necessario ricorrere ai Constructor Method. I Constructor method possono essere nidificati se siamo in presenza di tipi di dato astratto definiti in termini di altri tipi di dato astratto. Il comando seguente inserisce un singolo record nella tabella PRESTITO:

insert into PRESTITO values

(‘…’,ATTREZZI_VA(‘..’,’..’,’..’));

Questo comando di insert specifica subito il valore per la colonna Nome , dal momento che questa colonna non fa parte di alcun tipo di dati astratto viene popolata nel modo classico.

La parte successiva del comando insert inserisce dei record nella colonna Attrezzi. Dato che questa utilizza l’array variabile Attrezzi_VA, è necessario utilizzare il Constructor method ATTREZZI_VA. Inoltre, dato che si tratta di un Array variabile, è possibile passare più valori al Constructor Method stesso. Se l’Array Variabile si fosse basato sul tipo di dati ATTREZZO_TY, le chiamate al tipo di dati ATTREZZO_TY sarebbero state nidificate all’interno delle chiamate a ATTREZZI_VA:

insert into PRESTITO values

(‘…’,

ATTREZZO_VA(

ATTREZZO_TY(‘….’),

ATTREZZO_TY(‘….’),

ATTREZZO_TY(‘….’)));

L’array variabile ATTREZZI_VA è stato definito in modo da avere sino a cinque valori. Nel comando di insert precedente sono stati inseriti solo tre valori, gli altri due rimangono così non inizializzati. Se si desidera impostare i valori non inizializzati a null è sufficiente specificarlo nel comando di insert:

insert into PRESTITO values

(‘…’,

ATTREZZO_VA( ‘…’, ‘…’,’…’,null,null));

Nota.

Non è possibile inserire dei record in una tabella che contiene un Array Variabile, a meno di non conoscere la struttura e tipi di dati all’interno dell’array.

 

Interrogazione di dati dagli Array Variabile.

 

L’interrogazione dei dati dagli array variabili può avvenire direttamente dalla tabella:

 

select Attrezzi from Prestito;

 

ATTREZZI

------------------------------------------------------------------------------------

ATTREZZI_VA(‘…’,’…’,’…’)

 

Per visualizzare i dati degli array variabili su righe separate, si può ricorrere alla funzione TABLE nella clausola from.

 

Select b.Nome, n.*

From PRESTITO b, TABLE(b.ATTREZZI) n;

 

Name Column_Name

---------------------------------- --------------------------------------------

Rob MARTELLO

Rob MAZZA

Rob ASCIA

 

 

La funzione TABLE() accetta come imput il nome dell’array variabile mentre all’output viene assegnato l’alias N. Vengono selezionati i valori in N, creando così la seconda colonna dell’output.

Inoltre è possibile eseguire una query sull’array variabile per stabilirne il numero massimo di voci per riga, chiamato LIMIT(), e il numero corrente di voci per riga, COUNT().

 

Ad esempio:

 

set server output on

declare

cursor prestito_cursor is

select * from PRESTITO;

begin

for prestito_rec in prestito_cursor

loop

dbms_output.put_line(‘Nome Contratto:’ || prestito_rec.Nome);

for i in 1 .. prestito_rec.Attrezzi.Count

loop

dbms_output.put_line(prestito_rec.Attrezzi(i));

end loop;

end;

/

Nota.

E’ possibile utilizzare la clausola modify limit del comando alter type per cambiare il numero massimo di voci consentite in un array variabile.

Per una maggiore flessibilità nella selezione di dati dai collettori, è consigliato l’uso di tabelle nidificate.  

 
 
 
 
 

© Italiaonline S.p.A. 2024Direzione e coordinamento di Libero Acquisition S.á r.l.P. IVA 03970540963