PDA

View Full Version : [sql]stampare contenuto tabelle


dnarod
19-06-2007, 17:05
devo fare diverse procedure che stampino il contenuto delle tabelle in questo modo (piu o meno):
campo campo campo
val val val

insomma vorrei ottenere lo stesso risultato del mediocre output di una select * pero fatto con una procedura...uso dbms_output.put_line per mettere i campi (distanziati alla bella e meglio) e poi ciclo con un cursore e stampo i singoli campi cercando di incolonnarli come meglio posso....il guaio è che i valori di questi campi sono variabili in lunghezza e quindi non vedo alcuna soluzione (se voglio tenere tutto un minimo incolonnato)...

ora, premesso che sono niubbo, mi piacerebbe sapere se esiste un modo per fare cio che dico, oppure qualche idea geniale oppure devo cambiare strada...alla fine non mi serve nulla di raffinato, devo solo visualizzare cio che c e dentro le piu disparate tabelle (ovviamente facendo una procedura per ogni tabella, perche non so se esiste un modo per fare una procedura generica figa)...

spero di essermi spiegato

dnarod
20-06-2007, 20:16
mmm help!

altra cosa...se usando jdbc mi connetto al db, le procedure che stampano con dbms_output eccetera, come si comportano con java? cioe, mi mandano l output direttamente o devo usare qualcosa di magico per redirigere il tutto?

newuser
20-06-2007, 22:19
Ciao,

conosco un po' di SQL ma sono a digiuno di Java.

Da quello che riesco a capire stai cercando di inviare a console il risultato di una select: in StarBasic uso il servizio RowSet che rispecchia quello disponibile in Java e rende appunto disponibile il cursore per scorrere le righe.

E' possibile usare il metodo getString() per tutti i campi del rowset, anche quelli numerici/data. A questo punto misuri la lunghezza delle stringhe ritornate, aggiungi gli spazi necessari in testa e li stampi a console. Un esempio in SB:do while oRowSet.Next()
sRigaDaStampare=""
for i=0 to oRowSet.Columns.count-1
sMiaStringa=oRowSet.getString(i)
if len(sMiaStringa)<16 then
sMiaStringa=string(16-len(sMiaStringa);" ") & sMiaStringa
else
sMiaStringa=left(sMiaStringa;16)
end if
sRigaDaStampare=sRigaDaStampare & sMiaStringa
next i
print sRigaDaStampare
loopLa cosa migliore sarebbe comunque usare un controllo di tipo griglia in una finestra e popolarlo con i dati del RowSet.

shinya
21-06-2007, 16:33
con dbms_output da java secondo me non ci salti fuori. dbms_output ti salta fuori tipo se lanci la procedura da sqlplus... se la lanci da java dove dovrebbe redirigerlo? Sul tuo standard output? Boh...

Così ad occhio, puoi fare una procedura generica che data una tabella ti faccia una "select * from table1"... hai familiarità con il data dictionary?
Detta brutalmente, sotto lo schema sys potrai notare diverse view con tante belle informazioni. C'è ad esempio la "ALL_TAB_COLS", dove hai il nome della tabella e tutte le colonne con i relativi tipi.

Poi da java fai "select * from t" e ti cicli il resultset e stampi i valori o fai quel che ti pare.