Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [PL/SQL] Select * From XXX WHERE Nome_Campo IN (Valori_Dinamici)... Si Può?

    Chiedo scusa se il titolo del 3d non è proprio chiarissimo, ma non saprei come spiegarlo altrimenti...

    In ogni caso, vado al dettaglio del mio problema:
    sto creando un report parametrico con Crystal Reports XI, solo che ho dei problemi nella definizione della query perchè, purtroppo, uno di questi parametri è una stringa pari lunga n caratteri che contiene i valori che finiranno nella mia IN del titolo...

    Tanto per chiarezza faccio un esempio:
    se io inserisco il parametro 'A2B2C2D2' la query dovrà diventare
    Select * From XXX WHERE Nome_Campo IN ('A2', 'B2', 'C2', 'D2')

    Ho fatto una funzione in PL/SQL che mi trasforma 'A2B2C2D2' in 'A2', 'B2', 'C2', 'D2', ma non pare essere la soluzione, in quanto non funziona... mi sapete dare qualche suggerimento???

    Grazie mille a tutti!!!
    Desperado
    ...io non sono il Sig. Lebowski. Lei è il Sig. Lebowski. Io sono Drugo. E' così che deve chiamarmi, capito? O se preferisce Drughetto,...oppure Drugantibus...o Drughino se è di quelli che mettono il diminutivo a ogni costo...

  2. #2
    hai risolto per caso?
    Riccardo

  3. #3
    il problema è che 'A2B2C2D2' è una stringa e trasformarla in 'A2', 'B2', 'C2', 'D2' significa di fatto trasformarla in una stringa contenente "'A2', 'B2', 'C2', 'D2'" - con tutti gli apici.

    Di fatto è solo UNA stringa e non un vettore di stringhe, come invece penso tu voglia ottenere.

    Una soluzione - ma spero ce ne siano di altre migliori - è di trasformare la query in una stringa anch'essa, concatenare al momento giusto la sequenza di valori e lanciarla con il comando
    execute immediate lo_sql

    Esempio:
    codice:
    function get_prezzo_macchina (pa_tipo_macchina in varchar2)
    	lo_prezzo			number(20,8);
    	lo_sql				varchar2(4000);
    begin
    begin
    
    /*	
    	-- VECCHIA VERSIONE 
    	select	prezzo
    	into	lo_prezzo
    	from	listino
    	where	tipo_macchina IN (pa_tipo_macchina )
    */	
    
    	-- eseguo la query
    	lo_sql := 'select	prezzo '
    	|| '	from	listino '
    	|| '	where	tipo_macchina IN ('''|| pa_tipo_macchina || ''') ';
    
    	execute immediate lo_sql
    	into	lo_prezzo;
    	
    	return lo_prezzo;
    	
    exception
    	when others then
    		dbms_output.put_line (0);
    		dbms_output.put_line ('warning: get_prezzo_macchina() - ' || substr(sqlerrm,1,150));
    		return 0;
    end;
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.