Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi A - F > Basi di dati ~ informatica triennale > [plpgsql] usare nomi dinamici per le tabelle
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
elessard
.novellino.

User info:
Registered: Aug 2011
Posts: 7 (0.00 al dì)
Location:
Corso:
Anno:
Time Online: 2:05:12 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
[plpgsql] usare nomi dinamici per le tabelle

sto cercando di finire il progetto di quest'anno degli annunci immobiliari e ho riscontrato problemi nell'utilizzare all'interno di funzioni in plpgsql, nomi dinamici assegnati a tabelle, nel caso specifico quando tento di fare una select di una tabella ( il cui nome è inserito come argomento della funzione) per poi scorrerla con un FOR.
questo è il mio codice:

CREATE OR REPLACE FUNCTION create_view_criterio_2 (id integer, citta varchar, metratura integer) RETURNS SETOF sel_annunci AS $$
DECLARE
nome_t varchar;
range_a integer = metratura - 20;
range_b integer = metratura + 20;
annunci sel_annunci;
BEGIN
nome_t = 'view_id_' || id;
EXECUTE 'CREATE TABLE '|| nome_t || '(id_annuncio varchar PRIMARY KEY, titolo varchar, tipo contratto_domain, costo integer, mensile integer, id_unita integer, metratura integer, num_locali integer, categoria cat_domain, citta varchar)';
EXECUTE 'INSERT INTO ' || nome_t || '(SELECT A.id_annuncio, A.titolo, A.tipo, A.costo, A.mensile, U.id_unita, U.metratura, U.num_locali, U.categoria, UB.citta FROM annuncio A, unita_immobiliare U, ubicazione UB WHERE (A.unita_immobiliare = U.id_unita) AND (U.id_unita = UB.id_unita) AND (UB.citta = citta) AND (A.id_annuncio <> '|| id||') AND (U.metratura BETWEEN ' || range_a ||' AND ' || range_b ||'))';
FOR annunci IN SELECT * FROM view_id_5 LOOP
return next annunci;
END LOOP;
return;
EXCEPTION WHEN duplicate_table THEN
RETURN;
END;
$$ LANGUAGE plpgsql;


brevemente, ogni volta che io seleziono un annuncio, questa funzione (che prende come argomento l'annuncio, più altri parametri) crea una vista materializzata che ha come nome 'view_id_' più l'id dell'annuncio.
il mio problema è che non riesco a far girare nel FOR il risultato della select della vista materializzata che ho creato con un nome dinamico, infatti nella riga 'FOR annunci IN SELECT * FROM view_id_5 LOOP' ho messo 'view_id_5' giusto per testare la funzione ma tecnicamente dovrebbe essserci 'view_id_' con il numero che cambia in base all'annuncio.
come posso risolvere? ringrazio in anticipo

22-03-2012 00:46
Click Here to See the Profile for elessard Click here to Send elessard a Private Message Find more posts by elessard Add elessard to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
aPiso
.illuminato.

User info:
Registered: Sep 2010
Posts: 158 (0.03 al dì)
Location: Milano
Corso: Informatica
Anno: 3
Time Online: 1 Day, 21:54:30 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

pizzy sei un nabbo!!

22-03-2012 17:35
Click Here to See the Profile for aPiso Click Here to See the Blog of aPiso Click here to Send aPiso a Private Message Find more posts by aPiso Add aPiso to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
xSharKMaNx
un gioco della follia

User info:
Registered: Sep 2007
Posts: 1477 (0.23 al dì)
Location:
Corso: F49
Anno: Laureato
Time Online: 10 Days, 17:15:29 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Prima del FOR hai già verificato che l'INSERT INTO garantisce dei record ?

Poi il FOR dovrebbe essere ..... FROM '|| nome_t ||'
visto che hai utilizzato quella variabile.

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)

22-03-2012 19:45
Click Here to See the Profile for xSharKMaNx Click here to Send xSharKMaNx a Private Message Find more posts by xSharKMaNx Add xSharKMaNx to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
CowBoy
.arcimaestro.

User info:
Registered: May 2006
Posts: 294 (0.04 al dì)
Location: Milano
Corso: F49 - Informatica
Anno: Laureato F49
Time Online: 3 Days, 13:40:27 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
Re: [plpgsql] usare nomi dinamici per le tabelle

code:
CREATE OR REPLACE FUNCTION create_view_criterio_2 (id integer, citta varchar, metratura integer) RETURNS SETOF sel_annunci AS $$ DECLARE nome_t varchar; range_a integer = metratura - 20; range_b integer = metratura + 20; annunci sel_annunci; BEGIN nome_t = 'view_id_' || id; EXECUTE 'CREATE TABLE '|| nome_t || '(id_annuncio varchar PRIMARY KEY, titolo varchar, tipo contratto_domain, costo integer, mensile integer, id_unita integer, metratura integer, num_locali integer, categoria cat_domain, citta varchar)'; EXECUTE 'INSERT INTO ' || nome_t || '(SELECT A.id_annuncio, A.titolo, A.tipo, A.costo, A.mensile, U.id_unita, U.metratura, U.num_locali, U.categoria, UB.citta FROM annuncio A, unita_immobiliare U, ubicazione UB WHERE (A.unita_immobiliare = U.id_unita) AND (U.id_unita = UB.id_unita) AND (UB.citta = citta) AND (A.id_annuncio <> '|| id||') AND (U.metratura BETWEEN ' || range_a ||' AND ' || range_b ||'))'; FOR annunci IN SELECT * FROM view_id_5 LOOP return next annunci; END LOOP; return; EXCEPTION WHEN duplicate_table THEN RETURN; END; $$ LANGUAGE plpgsql;


Prova come diceva xSharKMaNx prima oppure prova sostituendo
code:
annunci sel_annunci; con annunci RECORD;

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..

23-03-2012 08:03
Click Here to See the Profile for CowBoy Click here to Send CowBoy a Private Message Find more posts by CowBoy Add CowBoy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
gionavisi
.amico.

User info:
Registered: Nov 2009
Posts: 35 (0.01 al dì)
Location: pizzighettone
Corso: informatica
Anno: 2
Time Online: 3:48:50 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
Question

Come si può fare a creare i cluster per la vicinanza geografica?che funzione da inserire in trigger e funzioni si può usare?

come avete questo problema?

11-04-2012 13:52
Click Here to See the Profile for gionavisi Click here to Send gionavisi a Private Message Find more posts by gionavisi Add gionavisi to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
elessard
.novellino.

User info:
Registered: Aug 2011
Posts: 7 (0.00 al dì)
Location:
Corso:
Anno:
Time Online: 2:05:12 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

io ho preso le coordinate e le ho usate come se fossero le ordinate e ascisse in un sistema di assi cartesiano x e y; poi ho banalmente usato l'annuncio per il quale volevo creare un cluster, come centro di un quadrato.
tutto ciò che era all'interno di questo quadrato è considerato geograficamente adiacente a quell'unità immobiliare.
secondo me bisogna inserire altri parametri per rendere più preciso il concetto di similarità... ma non ho ancora deciso.
questo l'ho realizzato tutto come funzione, invece il trigger l'ho fato per aggiorare la tabella materializzata usando sempre questo criterio.

12-04-2012 00:15
Click Here to See the Profile for elessard Click here to Send elessard a Private Message Find more posts by elessard Add elessard to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
CowBoy
.arcimaestro.

User info:
Registered: May 2006
Posts: 294 (0.04 al dì)
Location: Milano
Corso: F49 - Informatica
Anno: Laureato F49
Time Online: 3 Days, 13:40:27 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

In teoria per la soluzione ottima di questo problema è suggerito l'implementazione dei grafi, ma non conosco le richieste del progetto per poterti dire di più.

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..

12-04-2012 08:41
Click Here to See the Profile for CowBoy Click here to Send CowBoy a Private Message Find more posts by CowBoy Add CowBoy to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
elessard
.novellino.

User info:
Registered: Aug 2011
Posts: 7 (0.00 al dì)
Location:
Corso:
Anno:
Time Online: 2:05:12 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Mmm... ma perchè complicarsi la vita con i grafi? Lo scopo non è far vedere che sai utilizzare le viste materializzate?

12-04-2012 09:28
Click Here to See the Profile for elessard Click here to Send elessard a Private Message Find more posts by elessard Add elessard to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
gionavisi
.amico.

User info:
Registered: Nov 2009
Posts: 35 (0.01 al dì)
Location: pizzighettone
Corso: informatica
Anno: 2
Time Online: 3:48:50 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

@elessard

come hai fatto a vedere se una città è all'interno del tuo quadrato? hai fatto una differenza di un valore da te deciso e le coordinate del punto preso in considerazione immagino

18-04-2012 16:31
Click Here to See the Profile for gionavisi Click here to Send gionavisi a Private Message Find more posts by gionavisi Add gionavisi to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
elessard
.novellino.

User info:
Registered: Aug 2011
Posts: 7 (0.00 al dì)
Location:
Corso:
Anno:
Time Online: 2:05:12 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Si praticamente ho fatto così, gli ho dato un range di 0,03 e poi ho visto se il punto era interno a queso segmento immaginario sia per l'asse delle x che per le y; certo sarebbe stata una cosa più fine controllare se si trovava all'interno di un cerchio ma... troppa sbatta xD

19-04-2012 16:46
Click Here to See the Profile for elessard Click here to Send elessard a Private Message Find more posts by elessard Add elessard to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
gionavisi
.amico.

User info:
Registered: Nov 2009
Posts: 35 (0.01 al dì)
Location: pizzighettone
Corso: informatica
Anno: 2
Time Online: 3:48:50 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

ti ringrazio per la risposta, volevo chiedervi sapete dichiarare un tipo record? perchè io ho trovato e provato a fare cosi :

TYPE mio_studente IS RECORD

(nome VARCHAR(30),

cognome VARCHAR(30),

data_nascita DATE);

studente mio_studente;

ma non me lo permette. io vorrei un campo record cn dentro citta long e lat.

19-04-2012 23:19
Click Here to See the Profile for gionavisi Click here to Send gionavisi a Private Message Find more posts by gionavisi Add gionavisi to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
elessard
.novellino.

User info:
Registered: Aug 2011
Posts: 7 (0.00 al dì)
Location:
Corso:
Anno:
Time Online: 2:05:12 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

non ci ho mai provato, però mi è stato detto che se passi da postgres a php un record poi da porblemi quando devi fare il parsing del risultato.
io ho fattto tutto con create type:

code:
CREATE TYPE tipo_prova AS (attributo_1 INTEGER, attributo_2 varchar .....);

20-04-2012 09:54
Click Here to See the Profile for elessard Click here to Send elessard a Private Message Find more posts by elessard Add elessard to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
gionavisi
.amico.

User info:
Registered: Nov 2009
Posts: 35 (0.01 al dì)
Location: pizzighettone
Corso: informatica
Anno: 2
Time Online: 3:48:50 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

come si possono usare old e new con le tabelle a nomi dinamici?

23-04-2012 15:20
Click Here to See the Profile for gionavisi Click here to Send gionavisi a Private Message Find more posts by gionavisi Add gionavisi to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 03:30.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.039 seconds (86.22% PHP - 13.78% MySQL) con 26 query.