Come risolvere i problemi di mappatura dei parametri di query SQL durante l'utilizzo del provider Oracle OLE DB?

StackOverflow https://stackoverflow.com/questions/58540

  •  09-06-2019
  •  | 
  •  

Domanda

Quando provo a inserire una query SQL con parametri utilizzando il provider Oracle OLE DB, ricevo il seguente errore:

I parametri non possono essere estratti dal comando SQL.Il provider potrebbe non aiutare ad analizzare le informazioni sui parametri dal comando.In questo caso utilizzare la modalità di accesso "Comando SQL da variabile", in cui l'intero comando SQL viene memorizzato in una variabile.
INFORMAZIONI AGGIUNTIVE:
Il provider non può derivare informazioni sui parametri e SetParameterInfo non è stato chiamato.(Provider Microsoft OLE DB per Oracle)

Ho provato a seguire il suggerimento qui ma non capisco bene cosa è richiesto:Query con parametri su Oracle

Qualche idea?

È stato utile?

Soluzione

Per espandere il collegamento fornito nella domanda:

  1. Crea una variabile del pacchetto
  2. Fare doppio clic sul nome della variabile del pacchetto.(Ciò consente di accedere alle proprietà della variabile)
  3. Imposta la proprietà "EvaluateAsExpression" su true
  4. Immettere la query nel generatore di espressioni.
  5. Impostare la query di origine OLE DB su Comando SQL da variabile

Il generatore di espressioni può creare dinamicamente espressioni utilizzando la variabile per creare "query parametrizzate".
Quindi la seguente query "normale":

select * from book where book.BOOK_ID = ?

Può essere scritto nel generatore di espressioni come:

"select * from book where book.BOOK_ID = " + @[User::BookID]

È quindi possibile eseguire la gestione dei valori nulli e la conversione dei dati utilizzando il generatore di espressioni.

Altri suggerimenti

Se utilizzi l'attività Flusso di dati e l'origine OLE DB ed è necessario parametrizzare la query:

  1. Crea variabile per salvare l'istruzione "completa" della query:Fare clic con il tasto destro su un'area vuota all'esterno del pacchetto e fare clic su Variabili:

Variables

Fare clic su Aggiungi variabili nella finestra Variabili:

enter image description here

Fai in modo che il nome sia SQL_DTFLOW_FULL o qualcosa che puoi capire facilmente.IL variable data type È STRING

  1. Crea variabili per salvare i tuoi parametri.

cioè, il completo delle dichiarazioni di Query è:

SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter

nell'esempio sopra, ho solo un parametro:@BookID, quindi devo creare una variabile per salvare il mio parametro.L'aggiunta di più variabili dipende dalle tue query.

ParamAdd

Dategli un nome SQL_DTFLOW_BOOKID

IL variable data type È STRING

Quindi, è necessario rendere il tuo SSIS pulito e le variabili sono ordinate in parti comprensibili.

Prova a fare in modo che il nome della variabile sia SQL_{TASK NAME}_{VariableName}

  1. Crea espressione per SQL_DTFLOW_FULL variabile, fare clic sul numero 1 e iniziare a riempire il numero 2.Rendi le tue istruzioni SQL un'istruzione SQL corretta utilizzando il blocco di stringhe.Blocco di stringhe che solitamente utilizza "virgolette doppie" all'inizio e alla fine.Concatenare le variabili con il blocco stringa.

Expression

Fai clic su Valuta espressione per mostrare il risultato, per assicurarti che la query sia corretta, copia e incolla il risultato della query su SSMS.

Assicurati tu stesso che le variabili siano libere da SQL Injection utilizzando la tua logica.(Usa il tuo istinto da sviluppatore)

  1. Aprire l'attività Flusso di dati, aprire l'editor dell'origine OLE DB facendo doppio clic sull'elemento.

Data Flow

  • Selezionare la modalità di accesso ai dati: SQL Command From Variable
  • Seleziona il nome della variabile: SQL_DTFLOW_FULL
  • Fai clic su Anteprima per assicurarti che funzioni.

Questo è tutto, il mio modo per prevenire questo caso di fallimento del SSIS.Dato che lo uso in questo modo, non ho mai avuto questo problema, sai, SSIS qualcosa è strano.

Per modificare il valore della variabile, impostarlo prima dell'Attività flusso di dati, il Risultato SQL di SQL_DTFLOW_FULL la variabile verrà modificata ogni volta che si modifica il valore della variabile.

Nel mio caso il problema era che avevo commenti all'interno di SQL nella forma normale di /* */ e avevo anche alias di colonna come "Nome colonna" invece di [Nome colonna].

Una volta rimossi funziona.

Prova anche ad avere il tuo parametro ?dichiarazione all'interno della clausola WHERE e non all'interno di JOINS, anche questo faceva parte del problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top