|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
|
Oracle: ricerca su tutte le tabelle si uno schema
Ciao a tutti,
avrei bisogno di ricercare in maniera efficiente il valore massimo utilizzato all'interno di uno schema come chiave primaria su tutte le tabelle. Il campo ha lo stesso nome e lo stesso tipo per tutte le tabelle.. Ho fatto alcune prove ma non riesco a venirne a capo.. qualcuno sa dirmi come si può fare? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
magari esistono particolari funzioni, però potresti provare a :
- farti dare tutte le tabelle di uno schema ( - successivamente per ogni tabella fare una ricerca del max(column) Non so se questa cosa la devi infilare dentro un programma che risiede sul db oppure devi realizzarla in un altro linguaggio di programmazione. ciao
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Trucchi valgono?
Codice:
SELECT 'SELECT chiaveprimaria FROM '||name||' UNION ALL ' FROM tab Codice:
SELECT chiaveprimaria FROM ordini UNION ALL SELECT chiaveprimaria FROM clienti UNION ALL ... SELECT chiaveprimaria FROM fatture UNION ALL SELECT MAX(chiaveprimaria) FROM ( cancellare l'ultimo UNION ALL e postporre una parentesi chiusa ) per ottenre quindi Codice:
SELECT MAX(chiaveprimaria) FROM ( SELECT chiaveprimaria FROM ordini UNION ALL SELECT chiaveprimaria FROM clienti UNION ALL ... SELECT chiaveprimaria FROM fatture ) Togli eventuali riferimenti a tabelle che non servono. Ovvero, fai scrivere le query dal database. e, in generale, fai scrivere quanto piu' codice possibile da generatori di codice, eventualmente scritti da te.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 24-01-2011 alle 22:06. |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
|
Grazi mille,
adesso provo a fare la query, ma sarà alquanto lunga, dato che sono più di 140 tabelle |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
|
uhm.. ho provato con la prima query (SELECT 'SELECT id FROM '||name||' UNION ALL ' FROM tab) però mi da ORA-00904: "NAME": invalid identifier...
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
PRova SELECT * from tab e deduci da te il nome della colonna che contiene i nomi delle tabelle.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Sep 2007
Città: Trento
Messaggi: 91
|
Ho fatto così:
SELECT 'SELECT id FROM '||tname||' UNION ALL ' FROM tab e adesso funziona a meraviglia Grazie mille!!! |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Oh, non l'ho testata eh! Per compilare compila... prova un po'!
Codice:
create or replace function max_tables_pk (p_owner in varchar2)
return number
is
l_max number := 0;
l_candidate number;
l_query varchar2(2000);
begin
for table_list in (select table_name from all_tables where owner = p_owner)
loop
l_query := 'select max(nome_campo_pk) from ' || table_list.table_name;
execute immediate l_query into l_candidate;
if l_candidate > l_max then
l_max := l_candidate;
end if;
end loop;
return l_max;
exception
when others then
raise_application_error(-20000, 'Holy shit! ' || sqlerrm);
end max_tables_pk;
/
In input prende l'owner dello schema delle tabelle che ti interessano. edit: niente, ho visto che hai risolto! Troppo tardi! Tempismo perfetto come al solito
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:55.



















