API DB per lo scripting di shell (qualsiasi shell)

1

Ho di fronte alcuni script di shell legacy che eseguono lavori di elaborazione dati batch in Oracle utilizzando SQL+ . Per la maggior parte, il livello dati non deve tornare allo script con i dati recuperati da passare per l'elaborazione a livello di shell, ma in alcuni casi lo fa.

Il problema è che SQL + è davvero pensato per essere un'app per l'utente finale e non un'API in grado di comunicare con altri client in modo programmatico. Questo è il motivo per cui le persone hanno inventato API come DBD::DBI per Perl, JDBC per Java, ODBC ecc. Il modo in cui viene fatto è invocare SQL + e quindi analizzare l'output, che è chiaramente progettato per il consumo dell'occhio umano, utilizzando strumenti come sed e awk . Il tutto è al massimo un hack e molto incline a bug.

Dato che questo client è piuttosto conservativo con la loro tecnologia, non vogliono scalare i loro script fino a Perl o Python dove ci sono API di accesso ai dati. Quindi mi chiedo se ci siano API simili per shell, ad es. K o bash. Quello che vorrei sarebbe se un'API restituisse i dati in una matrice o stringhe bidimensionale (per la mancanza di impostazione del tipo) in modo che io possa solo leggere i dati del DB in quel modo.

Il modo in cui lo fanno ora è analogo all'analisi del normale codice HTML della pagina Web per ottenere una singola quotazione di borsa anziché chiamare in modo pulito un servizio Web e utilizzarlo.

Qualcuno sa di un prodotto che posso usare? Grazie

    
posta amphibient 27.11.2012 - 03:30
fonte

2 risposte

2

Quando ho lavorato su sistemi di script e database che sembrano simili, abbiamo eseguito la maggior parte della logica complessa (in qualsiasi modo correlata al database) in PL / SQL piuttosto che nello script.

Quindi lo script di bash sarebbe una cosa relativamente semplice, il PL / SQL avrebbe la logica complessa. Quando era particolarmente complesso, usavamo una stored procedure e attivavamo quella dallo script.

Questa potrebbe essere una via meno pericolosa dal punto di vista politico che provare a difendere Perl o Python.

    
risposta data 27.11.2012 - 08:22
fonte
1

Gli strumenti classici di shell unix / linux sono quasi sempre basati sul testo - questo è il loro punto di forza (a causa della semplicità) e la loro debolezza (a causa dei motivi che hai dato tu stesso). Quindi strumenti come SQLplus si adattano a questo schema, perché sono anche basati su testo (anche se penso che tu abbia ragione, l'uso di questo attraverso uno script di shell ha un alto rischio di diventare soggetto a errori e fragile).

Non conosco nessuna soluzione al tuo problema per K o Bash. Ma nel mondo MS Windows, c'è una soluzione moderna chiamata Powershell che ha esattamente le capacità che stai richiedendo, e linguaggi di scripting più vecchi come VBScript possono usare API basate su COM come ADO / OLE-DB per l'accesso al database. Questo potrebbe non essere d'aiuto per il tuo caso, dal momento che riscrivere uno script bash in Powershell produrrà uno sforzo analogo come riscriverlo in Perl o Python.

In realtà, se non è possibile sostituire il vecchio codice Bash in nessun modo, prima cercherò di vivere con la soluzione SQLplus e di imparare i dettagli cruenti su come affrontare i punti deboli di tale approccio. SQLplus è vecchio e maturo e ci sono soluzioni in giro per quasi tutti i problemi che potresti incontrare. Forse, se devi aggiungere nuove funzionalità, puoi provare a usare ulteriori script Perl o Python e combinarlo con gli script di shell esistenti. Ad esempio, utilizzare Perl per chiamare i dati da un servizio web e convertire i dati in un formato di testo che può essere ulteriormente elaborato all'interno di uno script bash. E forse, se mostri quella soluzione al tuo cliente, potresti convincerlo che gli script di bash non sono la soluzione migliore per tutto.

    
risposta data 27.11.2012 - 07:58
fonte

Leggi altre domande sui tag