Problema con Oracle e variabili

di il
8 risposte

Problema con Oracle e variabili

Ciao!

sto cercando di usare le variabili in una query in Oracle:

DECLARE COUNT_RECORD NUMBER;
BEGIN
  SELECT COUNT(*) INTO COUNT_RECORD FROM GEN_ATTRIB_ESTESI GAE 
  INNER JOIN GEN_ANAG GEN ON GAE.NPU = GEN.NPU 
  WHERE 
  GAE.DITAGENDA = 'XXL' 
  AND GEN.NPU = 18126 
  AND GAE.CODICE_ATTR LIKE 'UBICAZ%' 
  AND GEN.DITAGENDA = 'XXL' 
  AND GEN.FVL = ' ' 
  ORDER BY GEN.RAGSOC;
  IF COUNT_RECORD > 0 THEN
    SELECT 
    GEN.NPU NPU,
    GEN.BREVE BREVE,
    GEN.RAGSOC RAGSOC,
    GAE.CODICE_ATTR ATTRIB,
    GAE.VALORE VALORE 
    FROM GEN_ATTRIB_ESTESI GAE 
    INNER JOIN GEN_ANAG GEN ON GAE.NPU = GEN.NPU 
    WHERE 
    GAE.DITAGENDA = 'XXL' 
    AND GEN.NPU = 18126 
    AND GAE.CODICE_ATTR LIKE 'UBICAZ%' 
    AND GEN.DITAGENDA = 'XXL' 
    AND GEN.FVL = ' ' 
    ORDER BY GEN.RAGSOC;
  ELSE
    SELECT 
    GEN.NPU NPU,
    GEN.BREVE BREVE,
    GEN.RAGSOC RAGSOC,
    '' ATTRIB,
    '' VALORE 
    FROM GEN_ANAG GEN 
    WHERE 
    GEN.NPU = 18126 
    AND GEN.DITAGENDA = 'XXL' 
    AND GEN.FVL = ' ' 
    ORDER BY GEN.RAGSOC;
  END IF;
END;
ottengo questo errore che non riesco a risolvere:

Errore con inizio alla riga : 1 nel comando -
.................... (qui c'è scritta tutta la query di nuovo)
Report error -
ORA-06550: riga 13, colonna 5:
PLS-00428: an INTO clause is expected in this SELECT statement
ORA-06550: riga 29, colonna 5:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
come dovrei fare??

8 Risposte

  • Re: Problema con Oracle e variabili

    Allora, ho corretto la query e non mi da errore:
    
    DECLARE 
      COUNT_RECORD NUMBER;
      NPU NUMBER;
      BREVE CHAR(16);
      RAG_SOC VARCHAR2(64);
      CODICE_ATTRIB VARCHAR(12);
      VALORE VARCHAR(100);
      
    BEGIN
      SELECT COUNT(*) INTO COUNT_RECORD FROM GEN_ATTRIB_ESTESI GAE 
      INNER JOIN GEN_ANAG GEN ON GAE.NPU = GEN.NPU 
      WHERE 
      GAE.DITAGENDA = 'XXL' 
      AND GEN.NPU = 18126 
      AND GAE.CODICE_ATTR LIKE 'UBICAZ%' 
      AND GEN.DITAGENDA = 'XXL' 
      AND GEN.FVL = ' ' 
      ORDER BY GEN.RAGSOC;
      IF COUNT_RECORD > 0 THEN
        SELECT 
        GEN.NPU,
        GEN.BREVE,
        GEN.RAGSOC,
        GAE.CODICE_ATTR,
        GAE.VALORE VALORE 
        INTO
        NPU,
        BREVE,
        RAG_SOC,
        CODICE_ATTRIB,
        VALORE
        FROM GEN_ATTRIB_ESTESI GAE 
        INNER JOIN GEN_ANAG GEN ON GAE.NPU = GEN.NPU 
        WHERE 
        GAE.DITAGENDA = 'XXL' 
        AND GEN.NPU = 18126 
        AND GAE.CODICE_ATTR LIKE 'UBICAZ%' 
        AND GEN.DITAGENDA = 'XXL' 
        AND GEN.FVL = ' ' 
        ORDER BY GEN.RAGSOC;
      ELSE
        SELECT 
        GEN.NPU NPU,
        GEN.BREVE BREVE,
        GEN.RAGSOC RAGSOC,
        '' ATTRIB,
        '' VALORE 
        INTO
        NPU,
        BREVE,
        RAG_SOC,
        CODICE_ATTRIB,
        VALORE
        FROM GEN_ANAG GEN 
        WHERE 
        GEN.NPU = 18126 
        AND GEN.DITAGENDA = 'XXL' 
        AND GEN.FVL = ' ' 
        ORDER BY GEN.RAGSOC;
      END IF;
    END;
    
    però non stampa i record a console.
    mi da solo Procedura PL/SQL completata correttamente.
  • Re: Problema con Oracle e variabili

    E perché mai dovrebbe stampare qualcosa sulla console?

    Dovresti associare le tue query a cursori e, ciclando su questi, usare DBMS_OUTPUT.PUT_LINE per stampare quello che ti serve...
  • Re: Problema con Oracle e variabili

    dario78 ha scritto:


    E perché mai dovrebbe stampare qualcosa sulla console?

    Dovresti associare le tue query a cursori e, ciclando su questi, usare DBMS_OUTPUT.PUT_LINE per stampare quello che ti serve...
    non so cosi ferrato su oracle!
    adesso provo a vedere i CURSOR.
  • Re: Problema con Oracle e variabili

    Allora, mi sono guardato un pò di documentazione.
    ho provato questo codice:
    
    DECLARE
      COUNT_RECORD NUMBER;
      NPU NUMBER;
      BREVE CHAR(16);
      RAG_SOC VARCHAR2(64);
      CODICE_ATTRIB VARCHAR(12);
      VALORE VARCHAR(100);
      CURSOR CURSOR_COUNT IS
        SELECT COUNT(*)
        FROM GEN_ATTRIB_ESTESI GAE
        INNER JOIN GEN_ANAG GEN ON GAE.NPU = GEN.NPU
        WHERE
        GAE.DITAGENDA = 'XXL'
        AND GEN.NPU = 18126
        AND GAE.CODICE_ATTR LIKE 'UBICAZ%'
        AND GEN.DITAGENDA = 'XXL'
        AND GEN.FVL = ' '
        ORDER BY GEN.RAGSOC;
     
    BEGIN
      OPEN CURSOR_COUNT;
      COUNT_RECORD := CURSOR_COUNT%ROWCOUNT;
      DBMS_OUTPUT.PUT_LINE(COUNT_RECORD);
      CLOSE CURSOR_COUNT;
    END;
    
    anche in questo caso non vedo output a parte Procedura PL/SQL completata correttamente.
  • Re: Problema con Oracle e variabili

    Che client oracle stai utilizzando?
    Prima di tutto devi abilitare la "registrazione" delle stringhe che invii al DBMS_OUTPUT con il comando SET SERVEROUTPUT ON
    Dopo di che, se utilizzi sql developer, dal menù Visualizza, devi cliccare la voce OUTPUT DBMS, in modo da mostrare i log che crei a codice. Se usi altri client consulta la documentazione relativa.
  • Re: Problema con Oracle e variabili

    Ok, con l'istruzione SET SERVEROUTPUT ON funziona.
    però ho un dubbio.
    avrei bisogno di visualizzare l'output dentro ad un client grafico (scritto in Qt).
    devo mettere questo dentro ad una procedure o posso lanciare questo codice direttamente??
    (non so se mi sono spiegato).
  • Re: Problema con Oracle e variabili

    Credo di aver capito il senso della tua domanda.
    In questi casi dovresti creare una Function o una Procedure ed interfacciarti ad essa con le librerie a tua disposizione (in java useresti jdbc, nel tuo caso non so...).

    Il DBMS_OUTPUT andrebbe utilizzato solo in fase di sviluppo per scopi di logging, nulla più.
  • Re: Problema con Oracle e variabili

    dario78 ha scritto:


    Credo di aver capito il senso della tua domanda.
    In questi casi dovresti creare una Function o una Procedure ed interfacciarti ad essa con le librerie a tua disposizione (in java useresti jdbc, nel tuo caso non so...).

    Il DBMS_OUTPUT andrebbe utilizzato solo in fase di sviluppo per scopi di logging, nulla più.
    ok perfetto.
    allora farò una procedure.
    scusate se la domanda non era chiara.

    grazie!!
Devi accedere o registrarti per scrivere nel forum
8 risposte