Category Archives: PL/SQL

Oracle PL/SQL: Populate table from cursor

 
SET serveroutput ON
 
DECLARE
  -- Declare the PL/SQL table
  TYPE deptarr IS TABLE OF dept%ROWTYPE
       INDEX BY BINARY_INTEGER;
  d_arr deptarr;
 
  -- Declare cursor
  TYPE d_cur IS REF CURSOR RETURN dept%ROWTYPE;
  c1 d_cur;
 
  i NUMBER := 1;
BEGIN
  -- Populate the PL/SQL table from the cursor
  OPEN c1 FOR SELECT * FROM dept;
  LOOP
    EXIT WHEN c1%NOTFOUND;
    FETCH c1 INTO d_arr(i);
    i := i+1;
  END LOOP;
  CLOSE c1;
 
  -- Display the entire PL/SQL table on screen
  FOR i IN 1..d_arr.LAST LOOP
    DBMS_OUTPUT.put_line('DEPTNO : '||d_arr(i).deptno );
    DBMS_OUTPUT.put_line('DNAME  : '||d_arr(i).dname  );
    DBMS_OUTPUT.put_line('LOC    : '||d_arr(i).loc    );
    DBMS_OUTPUT.put_line('---------------------------');
  END LOOP;
END;
/

Fonte: http://psoug.org/snippet/Populate-table-from-cursor_535.htm

TNS: lost contact !

Primo “vero” momento di “crisi” per KOS. L’applicazione va in eccezione – con tempistica o azione del tutto causale – con “ORA-03113 end-of-file on communication channel”.

Vengono fatte tutte le analisi e le ipotesi del caso, risultato: nulla!, il problema continua a persistere.

E’ qui che comincia la crisi, non si riesce a capire quale sia il problema e quindi nemmeno a trovare una soluzione. L’unica cosa di cui siamo certi – analizzando i log – è che il problema è iniziato il giorno 13 Dicembre alle 13 circa. Quindi azzardiamo qualsiasi ipotesi:

Pensiamo che sia KOS:

Anche se non ci crediamo molto, l’ultima release è stata fatta giorno 12 con una release note veramente scarna: solo qualche minor bug fixing.In quanto, concentrati sulla release del nuovo modulo di MAGAZZINO/FARMACIA. Facciamo tutti i controlli del caso, risultato: nulla!

Pensiamo che sia il nuovo SERVER PACS :

Hanno da poco installato un nuovo server che fungerà da PACS. Ipotizziamo che non sia stato configurato bene oppure che il transfer di immagini sia troppo oneroso e provochi problemi. Abbiamo provato a staccarlo, risultato: nada!

Pensiamo che sia ORACLE:

Attiviamo tutti i log possibili ed immaginabili e consultiamo tutti i tips del caso, i vari forum, e quant’altro ci possa dare una mano. Devo dire che oracle permettere di indagare veramente a fondo, al punto di poter “tracciare” i singoli pacchetti inviati nella comunicazione client-server.

Qui di seguito alcuni link di riferimento:

http://www.orafaq.com/wiki/Sqlnet.ora

http://www.orafaq.com/faqnet.htm

http://www.oracle-base.com/articles/misc/OracleNetworkConfiguration.php

http://download.oracle.com/docs/cd/B14117_01/network.101/b10775/troublestng.htm

http://forums.oracle.com/forums/thread.jspa?messageID=2256122

Ma senza nessun risultato.

Pensiamo che sia il SERVER che ospita ORACLE:

Ma non troviamo alcun log che possa indicarci qualche malfunzionamento. Risutato: buio completo!

Pensiamo che sia lo SWITCH che collega i SERVER alla rete:

Ma anche qui facciamo “quasi” un buco nell’acqua, troviamo un cavo difettoso (per una scheda secondaria di un altro server). Risultato: nulla di che!

Oramai siamo in preda alla follia, azzardiamo qualsiasi ipotesi anche senza senso, torniamo a pensa che sia ORACLE:

Magari qualche query errata, o comunque qualcosa che impegni il db cosi tanto da far cadere le connessioni. Un corruzione di indici. Risultato: ancora niente.

Torniamo a pensare che sia un problema di rete:

Attiviamo ethereal, pensiamo che qualche macchina mandi pacchetti anomali provocando disconnessioni o che le workstation del pacs dia problemi. Risultato: boh!

Giorno 20 Dicembre, siamo distrutti, facciamo ipotesi che potrebbero essere definite ‘fantasiose’: “attacco DOS”:

Stacchiamo firewall, e quant’altro, siamo esclusi dal mondo esterno. Sono le 19.03, oramai c’è solo silenzio. Quando all’improvviso: “drin! drin!”. Il telefono!… direte voi! Non può essere! … abbiamo scaricato i cordless a furia di telefonate da parte degli operatori e dei medici che non riuscivano lavorare. Allora cosa ?… una cosa che ci ha inquietati tutti! Squillava un contatto skype di un collega! Tutti in coro: ma come !?! siamo scollegati da internet. A me viene i mente scene di un film come “the ring”. Un collega ha scritto come topic sul suo contatto skype:”una chiamata dall’aldilà“.

Veniamo a scoprire tramite un tracert dell’esistenza di un router “sconosciuto”. Indagando, scopriamo che tale router è stato proprio installato in concomitanza con l’inizio dei nostri problemi. Come potete intuire, è un router che non dovrebbe proprio essere presente nella nostra rete e ci collegava in “malomodo” ad un’altra rete che non ha nulla a vedere con la nostra.

Risultato: Scollegandoci da quel router maledetto si è risolto il problema.

Fletto i muscoli e sono nel vuoto !

ps. Buon Natale a tutti 😀

select sysdate from dual : table does not exist

Se dovesse mai capitarvi di avere un bel “table does not exist” su istruzioni come:

sql> select sysdate from dual;

Avete bisogno di corregere i permessi sulla tabella dual. Quindi:

sql> grant select on dual to public;


Fletto i muscoli e sono nel vuoto.

ps. grazie Dario.

PL/SQL Developer 7.0

In attesa di testare SQL Developer rilasciato in questi giorni da Oracle. Consiglio a chiunque lavori con Oracle (dba e non) PL/SQL Developer. Lo so che è a pagamento, ma finora, non ho trovato un tool migliore per lavorare con Oracle.

Fletto i muscoli e sono nel vuoto.