Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    inserire campo complesso in tabella oracle

    In pseudo codice, ho una sql del tipo:

    UPDATE TABELLA SET CAMPO = FUNZIONE(X1, X2, X3, ..., Xn) WHERE ID = 1;

    Utilizzando i soliti mezzi forniti da ADO.NET non si hanno problemi ad eseguire questa istruzione.

    Il problema nasce quando i parametri dentro FUNZIONE, superano un certo numero.

    Allora, oracle dà errore (più o meno, troppi parametri in FUNZIONE)

    Ho visto in rete una soluzione che consiste nel riempire una tabella ausiliaria con i valori x1, xn, per poi usare PL/SQL per riempire un vettore da questa tabella ed eseguire quindi l'update.

    Questo in effetti funziona, ma è abbastanza (molto) lento.

    La domanda è: esiste un qualche modo per eseguire questo update senza far ricorso ad una tabella ausiliaria?

    ciao
    Pietro

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    Magari risolvi facendo una query parametrica.

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da URANIO
    Magari risolvi facendo una query parametrica.

    Perfetto! Ma come?, questo è il problema!

    ciao
    Pietro

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    Qua un esempio
    http://community.visual-basic.it/luc...les/18386.aspx

    Banalmente sono le query che al posto dei "valori" hanno "?"
    I valori poi li carichi nella command in ordine e lui li sostituisce.

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da URANIO
    Qua un esempio
    http://community.visual-basic.it/luc...les/18386.aspx

    Banalmente sono le query che al posto dei "valori" hanno "?"
    I valori poi li carichi nella command in ordine e lui li sostituisce.
    Ti ringrazio . Purtroppo non è così semplice o sono io che proprio non ci arrivo.

    Ciao
    Pietro

  6. #6
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    Originariamente inviato da pietro09
    Ti ringrazio . Purtroppo non è così semplice o sono io che proprio non ci arrivo.

    Ciao
    Cosa non è chiaro?
    Al posto di creare la query con tutti i valori tipo...
    "Select * from Tabella Where ID_pippo = " & variabileID

    Devi fare la query in questo modo
    "Select * from Tabella Where ID_pippo = ?"

    E successivamente passare il parametro

    codice:
    ''creai il parametro (del tipo corretto)
    Dim prm As New OleDb.OleDbParameter() 
    prm.Direction = ParameterDirection.Input
    prm.DbType = DbType.int
    prm.Value = variabileID
    
    ''lo passi alla command
    
    cm.Parameters.Add(prm)

    Il resto dovrebbe essere uguale a quello che fai ora.

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non sto ricevendo notifiche ed ho visto la risposta solo adesso.

    riepilogo il problema:

    Come passare matrici da .Net ad Oracle mediante parametri o senza.
    esempio:
    SELECT * FROM TABELLA WHERE ID IN (:LISTA);

    e anche:
    UPDATE TABELLA SET CAMPO = FUNZIONE(:LISTA) WHERE ID = 1;

    dove :LISTA è un vettore di Double, X1, X2, X3, ..., Xn

    Il problema è che questo vettore può contenere migliaia di elementi.

    Da quello che so, sembra che non si possa risolvere, se non ricorrendo al linguaggio PL/SQL e con l'uso delle stored procedure

    Pietro

  8. #8
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    MIGLIAIA!

    Allora no, una tabella temporanea/ausiliaria probabilmente è la cosa migliore.

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da URANIO
    MIGLIAIA!

    Allora no, una tabella temporanea/ausiliaria probabilmente è la cosa migliore.

    In pratica è la geometria di un limite amministrativo, un comune con le sue varie isole.

    Con la tabella ausiliaria e PL/SQL ci riesco, ma è un processo abbastanza lungo.
    Ecco perchè speravo in un modo migliore

    Ciao
    Pietro

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Concludo questo post solo per dirti che avevi ragione! Bisogna usare i parametri.

    In pratica si usa il connector di Oracle.
    Si crea una connessione ad Oracle da Visual studio, utente SYS, ruolo SYSDBA.
    Nello schema MDSYS si cerca nella cartella "Tipi definiti dall'utente", il tipo che interessa, per esmpio SDO_GEOMETRY.
    Dopo di che, tasto destro, "Genera classe personalizzata", crea una classe di interfaccia che permette di usare istruzioni sql con parametri.

    ciao
    Pietro

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 © 2025 vBulletin Solutions, Inc. All rights reserved.