Domanda

sto iniziando a conoscere COBOL. Ho alcuni programmi di scrittura di esperienza che si occupano di database SQL e Credo di essere confuso come negozi COBOL e recupera i dati che vengono memorizzati in un mainframe per esempio. So che non è come database relazionali, ma ogni programma di esempio che ho visto prende i dati direttamente dalla linea di comando e so che non è il modo vero e proprio mondo programmi COBOL elaborano i dati. Qualcuno può spiegare o mostrarmi una buona risorsa che può spiegare?

È stato utile?

Soluzione

COBOL è solo un altro terzo linguaggio informatico generazione. E 'solo un po' più vecchio rispetto alla maggior parte, che non significa che è in qualche modo incompleta (in realtà si tratta di un bel po 'di bagagli - 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, letto, scritto e chiuso utilizzando il file / o funzioni di I del linguaggio.

Vari meccanismi sono usati per formare un collegamento tra un file effettivo e il programma. I dettagli qui sono spesso specifici per il sistema operativo che si sta lavorando sotto. In generale, le implementazioni COBOL cercano di isolarsi dall'ambiente che opera attraverso un nome di file logico al contrario di un nome effettivo. Questo riferimento indiretto aggiunto è importante quando si sta scrivendo programmi che sarà portato a diverse piattaforme (ad esempio scrivere e test entro un IDE su piattaforma Windows, e quindi eseguire su un mainframe).

I seguenti esempi si riferiscono a un ambiente mainframe IBM.

Nel mondo mainframe IBM, vi accorgerete che i programmi vengono eseguiti come sia batch o on-line (per esempio CICS). Non descriverò come impostare per il file di I / O sotto CICS (che è una lunga storia). I programmi che vengono utilizzati per manipolare i file sono di solito batch. Ecco un esempio di massima di come funziona un programma batch:

  1. programmi batch vengono eseguiti tramite JCL. JCL viene utilizzato per identificare il programma da eseguire ( 'EXEC' economico) e per individuare quali file il programma farà riferimento utilizzando le istruzioni 'DD'. La funzione di una comunicazione DD è quello di formare una connessione logica tra un file vero e proprio e un nome il programma COBOL farà riferimento quando si vuole fare riferimento al file (questo è il meccanismo di isolamento citato 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 così i dettagli sono specifici per l'ambiente operativo.

  2. Nella sezione 'FILE-CONTROL' del programma COBOL, si collega il 'nome DD' definito nel JCL con il nome che verrà utilizzato su ogni istruzione di I / O per fare riferimento a quel file. Questa connessione viene definita utilizzando la 'select' dichiarazione.
    Ad 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'affermazione SELECT stessa è parte dello standard ISO COBOL. Tuttavia, molte implementazioni COBOL definiscono alcune estensioni non standard per facilitare varie stranezze ai loro sottosistemi di file.

  3. Apri, leggere, scrivere, chiudere i file all'interno della '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 fare questo all'interno COBOL. Capire il quadro completo richiederà un certo sforzo reale, tempo e la pratica. Le dichiarazioni di I / O sopra illustrate sono parte dello standard COBOL, ma ogni vendor avranno le loro estensioni.

IBM COBOL supporta una vasta gamma di organizzazioni di file e metodi di accesso. È possibile rivedere la qui per ottenere la sintassi e le regole per la manipolazione di file, tuttavia, il Guida per l'utente fornisce un sacco di buoni esempi per la lettura / scrittura di file (si dovrà scavare un po ', ma è tutto predisposto per voi).

Il setup per fare riferimento a un database SQL tramite un programma COBOL è un po 'diversa, ma prevede la creazione di un collegamento tra il programma e il sottosistema di database. All'interno del mondo di IBM è duno throug JCL, altri ambienti utilizzeranno 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 è piuttosto semplice select SQL. I nomi preceduti da due punti sono variabili host COBOL utilizzati per passare i dati a DB2 o ricevere indietro. Se avete mai codificato le routine di accesso al database prima di questo dovrebbe essere molto familiare a voi. Questo link fornisce una semplice introduzione a incorporare istruzioni SQL in un programma IBM enterpirse COBOL.

A proposito, IBM Enterprise COBOL è in grado di lavorare con i documenti XML troppo. Ci scusiamo per il pesante inclinazione IBM, ma che è l'ambiente mi è più familiare.

Spero che questo è una buona partenza nella giusta direzione.

Altri suggerimenti

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

Una società che ho usato per lavorare, ha fatto proprio questo - con SQLite. Questo piccolo gioiello di una biblioteca di pubblico dominio compila le istruzioni SQL in bytecode, allora li esegue.

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

ambienti in batch COBOL tradizionale usano una 'sezione di dati' del programma COBOL di dichiarare direttamente le connessioni al database, che sono a loro volta istituiti in JCL. Dal momento che precede COBOL SQL, quelli sarebbero la tendenza ad essere vari altri tipi di database, ma è probabile che IBM ha fatto il lavoro di SQL con DB / 2. Immagino si otterrà un'altra risposta da qualcuno più vicino a questa roba. Se si guardano le preprocessori SQL disponibili per l'uso con altri linguaggi si otterrà l'idea -. Un cursore si trasforma in un tipo di dati nativo e fornisce i risultati delle query alle variabili native

Mainframe Cobol utilizza SQL incorporato (un po 'come SQLj), per esempio:.

Divisione procedura.

   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 di database gestisce ottenere che i dati al posto giusto.

Molto facile rispetto alla roba distribuito in realtà.

Tutti della ho lavorato in COBOL hanno utilizzato, che ha parlato con un database relazionale negozio di mainframe IBM. In generale questa è stata DB2 di IBM. Si prega di notare che DB2 è un database relazionale che girano su mainframe di. Può anche essere eseguito su Windows o Linux.

Venti anni fa un modo predominante per inserire i dati nel database DB2 mainframe era quello di utilizzare CICS. CICS è un software "livello di presentazione" che comminicates con schermi di immissione dei dati di carattere based. Considerate CICS l'equivelant funzionale di PHP o ASP.NET.

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

Il mio punto è che i dati possono entrare nel database mainframe DB2 in molti modi da molte piattaforme. Il linguaggio COBOL potrebbe essere coinvolto in immissione dei dati, reporting, alterando COBOL dei dati, ecc, ma potrebbe essere solo una parte di un programma di livello più che potrebbe essere parte di Windows, web e mainframe. Potrei dare esempi specifici se si dispone di ulteriori informazioni sull'applicazione lavorerete con al vostro stage.

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