Domanda

Di recente abbiamo dovuto lavorare un po 'con un database OpenEdge che utilizza un prodotto di terze parti e oggi (dopo molti strappi di capelli), abbiamo finalmente identificato il motivo per cui una vista non restituiva risultati. Questa vista in questione combina circa 100 tabelle separate e viene quindi interrogata (abbiamo diritti limitati su questo database). Uno dei campi restituiti da questa vista è una stringa hardcoded letterale, lungo le linee di

'John Smith' AS TheName

Avevamo difficoltà a eseguire query che includevano questa stringa, che stavamo provando a RTrim (la vista restituiva molti spazi finali) e quindi concatenare con un altro campo. Tuttavia, se abbiamo utilizzato RTrim su questo campo, invece di restituire un messaggio di errore o un valore null o qualcosa del genere, la riga semplicemente non è stata restituita. Non stavamo cercando di usarlo in una clausola WHERE o JOIN, questo faceva semplicemente parte di SELECT ... FROM VIEWNAME. Dopo aver esaminato la vista, sembrava che la vista avesse erroneamente rilevato la lunghezza della stringa di 9 caratteri (non è stata specificata alcuna lunghezza nella definizione) e RTrim non funzionava. Ora, potrei capire perché questo potrebbe comportare un messaggio di errore o un valore NULL in SELECT, ma perché la riga semplicemente non dovrebbe essere restituita affatto ? Questo non sembra un buon comportamento SQL e non l'ho mai visto accadere con nessun altro RDBMS.

Altre informazioni: stiamo testando le query tramite ODBC e WinSQL, al fine di includerle in un'app ASP.NET esistente. Non abbiamo accesso al back-end se non tramite questo, anche se abbiamo i diritti per creare viste.

Aggiornamento: come follow-up strano, abbiamo ora scoperto che se tentiamo di interrogare questa vista senza alcuna clausola WHERE, nessun record viene restituito. Questo potrebbe avere la stessa causa.

È stato utile?

Soluzione

Sembra che potrebbe essere correlato a SQL-WIDTH nel database di avanzamento. Un problema con Progress è che se il contenuto del campo supera SQL-WIDTH, si otterrà un comportamento SQL strano (a volte il driver potrebbe non funzionare, altre volte non si ottengono risultati).

Per identificarlo è necessario utilizzare il comando dbtool per verificare la presenza di SQL-WIDTH che potrebbero essere superati.

Altri suggerimenti

Assicurati di non avere spazi vuoti. Il taglio non rimuove solo gli spazi. Anche gli spazi vuoti non sono nulli. C'è una differenza nel set di caratteri mentre non è visibilmente diverso nel tuo editor. Mi sono imbattuto in questo con alcuni database, DBII, Oracle, PostGreSQL. Controlla il set di caratteri del tuo editor e prova a visualizzare le tabelle, potresti non vedere nulla o potresti vedere grandi rettangoli.

Sembra un comportamento molto strano. Basta codificarlo, eseguire la manipolazione di trim e / o stringhe nell'applicazione e procedere.

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