2010-03-13 34 views
9

Sto iniziando a conoscere COBOL. Ho una certa esperienza nella scrittura di programmi che si occupano di database SQL e credo di essere confuso da come COBOL memorizza e recupera i dati che sono memorizzati in un mainframe, per esempio. So che non è come i database relazionali, ma ogni programma di esempio che ho visto prende i dati direttamente dalla riga di comando e so che non è così che i programmi COBOL del mondo reale elaborano i dati. Qualcuno può spiegarmi o mostrarmi una buona risorsa che possa spiegarlo?In che modo COBOL memorizza e recupera i dati?

risposta

20

COBOL è solo un altro linguaggio di computer di terza generazione. È solo un po 'più vecchio della maggior parte di ciò che non significa che sia in qualche modo incompleto (in realtà viene fornito con un bel po' di bagaglio - ma questa è un'altra storia).

Come con qualsiasi altro linguaggio di terza generazione, COBOL manipola i file di dati più o meno nello stesso modo in cui si farebbe in un programma C. Niente di strano, misterioso o magico. I file vengono aperti, letti, scritti e chiusi utilizzando le funzionalità I/O del file della lingua.

Diversi meccanismi sono utilizzati per creare un collegamento tra un file effettivo e il programma. I dettagli qui sono spesso specifici del sistema operativo su cui stai lavorando. In generale, le implementazioni COBOL cercano di isolarsi dall'ambiente operativo tramite un nome file logico anziché un nome effettivo. Questa aggiunta indiretta è importante quando si scrivono programmi che verranno trasferiti su piattaforme diverse (ad esempio, scrivere e testare all'interno di un IDE su una piattaforma Windows e quindi eseguire su un mainframe).

I seguenti esempi riguardano un ambiente IBM Mainframe.

All'interno del mondo mainframe IBM, i programmi vengono eseguiti come batch o on-line (ad esempio CICS). Non descriverò come configurare i file I/O sotto CICS (è una lunga storia). I programmi che vengono utilizzati per manipolare i file sono in genere batch. Ecco un'illustrazione approssimativa di come funziona un programma batch:

  1. I programmi batch vengono eseguiti tramite JCL. JCL viene utilizzato per identificare il programma da eseguire ('istruzione EXEC') e per identificare i file che il programma farà riferimento usando le istruzioni 'DD'. La funzione di un'istruzione DD consiste nel formare una connessione logica tra un file effettivo e un nome che il programma COBOL farà riferimento quando desidera fare riferimento al file (questo è il meccanismo di isolamento menzionato in precedenza). Ad esempio,

    JCLDDNAM DD DSN='HLQ.MY.FILE'... 
    

    sarebbe associare il nome 'DD' 'JCLDDNAM' per il file denominato 'HLQ.MY.FILE'. Questa parte dipende dalla piattaforma, quindi i dettagli sono specifici per l'ambiente operativo.

  2. Nella sezione 'FILE-CONTROL' del programma COBOL, si collega 'DD NAME' definito nel proprio JCL con il nome che si utilizzerà su ciascuna istruzione I/O per fare riferimento a quel file. Questa connessione è definita usando l'istruzione 'SELECT'.
    Per esempio,

    SELECT MYFILE 
    ASSIGN JCLDDNAM 
    remainder of select 
    

    fa un collegamento tra qualsiasi file che è legato al 'JCLDDNAM' nel vostro 'JCL' a 'MYFILE' che si farà riferimento successivamente nelle dichiarazioni COBOL di I/O. L'istruzione SELECT fa parte dello standard ISO COBOL. Tuttavia, molte implementazioni COBOL definiscono alcune estensioni non standard per facilitare i vari quirk ai loro sottosistemi di file.

  3. aprire, leggere, scrivere, chiudere i file all'interno del 'PROCEDURA DIVISIONE' di si programma utilizzando il nome 'MYFILE' come in:

    OPEN MYFILE 
    READ MYFILE 
    CLOSE MYFILE 
    

Quanto sopra è molto semplificata, e ci sono una moltitudine di modi per farlo all'interno di COBOL. Capire il quadro completo richiederà un po 'di sforzo, tempo e pratica. Le istruzioni I/O illustrate sopra fanno parte dello standard COBOL, ma ogni fornitore avrà le proprie estensioni.

IBM COBOL supporta una vasta gamma di organizzazioni di file e metodi di accesso. È possibile rivedere il manuale di riferimento IBM Enterprise COBOL here per ottenere la sintassi e le regole per la manipolazione dei file, tuttavia lo User Guide fornisce molti buoni esempi per la lettura/scrittura di file (dovrete scavare un po ', ma è tutto posato fuori per te).

L'installazione per fare riferimento a un database SQL tramite un programma COBOL è leggermente diversa ma comporta l'impostazione di una connessione tra il programma e il sottosistema del database. All'interno del mondo IBM questo viene fatto tramite JCL, altri ambienti useranno meccanismi diversi.

IBM COBOL utilizza un pre-processore o coprocessore per integrare l'accesso al database e lo scambio di dati. Ad esempio, il seguente codice sarebbe recuperare alcuni dati da un database DB2:

MOVE 1234 TO PERSON-ID 
EXEC SQL 
    SELECT FIRST_NAME, LAST_NAME 
    INTO :FIRST-NAME, :LAST-NAME 
    FROM PERSON 
    WHERE PERSON_ID = :PERSON-ID 
END-EXEC 
DISPLAY PERSON-ID FIRST-NAME LAST-NAME 

La roba tra il EXEC SQL e END-EXEC è un piuttosto semplice select SQL. I nomi preceduti dai due punti sono le variabili host COBOL utilizzate per passare i dati a DB2 o per riceverli di nuovo. Se hai mai programmato le routine di accesso al database prima di questo dovrebbe sembrarti molto familiare. Questo link fornisce una semplice introduzione all'inserimento di istruzioni SQL in un programma IBM Enterpirse COBOL.

A proposito, IBM Enterprise COBOL è anche in grado di lavorare con documenti XML. Ci scusiamo per la pesante inclinazione dell'IBM, ma questo è l'ambiente con cui ho più familiarità.

Spero che questo ti aiuti nella giusta direzione.

+0

ti colpisca in modo determinante. Grazie per aver dedicato del tempo a scrivere così tanto! –

+0

@MC Emperor, quando si effettuano modifiche, si prega di includere il motivo nella casella fornita. Se cambi una parola, assicurati di farlo correttamente. –

+0

@BillWoodger Puoi facilmente vederlo nella cronologia delle revisioni. –

1

Gli ambienti batch COBOL tradizionali utilizzano una "sezione dati" del programma cobol per dichiarare direttamente le connessioni al database, che sono a loro volta configurate in JCL. Dato che COBOL precede l'SQL, questi sarebbero tendenzialmente vari altri tipi di database, ma è probabile che IBM abbia reso SQL compatibile con DB/2. Immagino che avrai un'altra risposta da qualcuno più vicino a questa roba. Se si osservano i preprocessori SQL disponibili per l'uso con altri linguaggi, si otterrà l'idea: un cursore diventa un tipo di dati nativo e fornisce risultati di query a variabili native.

+0

ah. Quindi la mia comprensione potrebbe essere leggermente distorta. COBOL tratta invece la manipolazione dei dati e non fa molto con il recupero dei dati. Il motivo principale per cui ho fatto questa domanda è che sto facendo uno stage questa estate e non sto facendo il cobol lì, ma è quello che usano per elaborare i loro dati finanziari ed ero confuso su come avresti portato i dati in cobol per processi. Mi piace molto la tua risposta, grazie! –

+0

@bmargulies: -1: ipotizza che l'IBM –

0

Tutti i negozi del mainframe IBM in cui ho lavorato hanno utilizzato COBOL che ha parlato con un database relazionale. Generalmente è stato il DB2 di IBM. Si noti che DB2 è un database relazionale eseguito su mainframe. Può anche essere eseguito su Windows o Linux.

Vent'anni fa un modo predominante per inserire dati nel database mainframe DB2 era utilizzare CICS. CICS è un software di "livello di presentazione" che si adatta alle schermate di immissione dei dati basate sui caratteri. Considera CICS l'equivalente funzionale di PHP o ASP.NET.

Oggi ci sono molte più opzioni per ottenere dati in DB2. CICS è ancora un'opzione ma il tuo "livello di presentazione" potrebbe essere PHP, ASP.NET, Win Forms, Java JSF, Powerbuilder. La cosa fondamentale è che la tua piattaforma di sviluppo dovrebbe essere in grado di lavorare con un driver di database DB2.La piattaforma potrebbe essere Windows, Linux e possibilmente altri.

Il mio punto è che i dati possono entrare nel database DB2 del mainframe in molti modi da molte piattaforme. Il linguaggio COBOL potrebbe essere coinvolto nell'inserimento dati, nella segnalazione, nell'alterazione dei dati COBOL, ecc. Ma potrebbe essere solo parte di un'applicazione multilivello che potrebbe essere parte di Windows, Web e mainframe. Potrei fornire esempi specifici se hai maggiori informazioni sull'applicazione con cui lavorerai durante il tuo stage.

2

Chi ha detto che non è possibile utilizzare SQL per recuperare i dati da un'applicazione cobol, magari senza spendere soldi?

Una società per la quale ho lavorato, ha fatto proprio questo: con SQLite. Questo piccolo gioiello di una biblioteca di dominio pubblico compila istruzioni SQL in bytecode, quindi le esegue.

Sostituendo il livello "back-end" di SQLite con un'interfaccia personalizzata alla libreria C che si occupa di file Cobol, è stato possibile interrogare i dati Cobol da altri linguaggi, in questo caso Python. Ha funzionato - nei limiti di SQLite ovviamente, ma era stabile, sembrava abbastanza relazionale e non richiedeva nemmeno un server DB :-)

1

Mainframe Cobol utilizza SQL incorporato (simile a SQLj), ad esempio :

Divisione procedure.

Exec SQL 
     Select col1, col2 
      from myTable 
     into :ws-col1, :ws-col2 
     where col0 = :col0 
    End-Exec 

In questo caso, le variabili host WS-col0, WS-col1 e WS-col2 sono definite nella sezione di lavoro di immagazzinamento. L'interfaccia del database riesce a ottenere quei dati nel posto giusto.

Molto facile rispetto alle cose distribuite in realtà.

+0

Anche la tua risposta mi piace. Il posto in cui sto internando in questo momento utilizza cobol per le loro risorse mainframe e sono stato esposto a un po 'di esso insieme al CICS che usano per connettere i dati alle nostre app java ee. –

Problemi correlati