문제

COBOL에 대해 배우기 시작했습니다. SQL 데이터베이스를 다루는 프로그램을 작성한 경험이 있으며 COBOL이 예를 들어 메인 프레임에 저장된 데이터를 검색하는 방법을 혼란스럽게 생각합니다. 나는 그것이 관계형 데이터베이스와 같지 않다는 것을 알고 있지만 내가 본 모든 예제 프로그램은 명령 줄에서 데이터를 바로 가져옵니다. 실제 COBOL 프로그램이 데이터를 처리하는 방식이 아님을 알고 있습니다. 누군가가 그것을 설명 할 수있는 좋은 자원을 설명하거나 보여줄 수 있습니까?

도움이 되었습니까?

해결책

Cobol은 또 다른 3 세대 컴퓨터 언어입니다. 그것은 대부분의 것보다 조금 더 오래된 것이므로 어떻게 든 불완전하다는 것을 의미하지는 않습니다 (실제로는 약간의 수하물이 있습니다. 그러나 그것은 또 다른 이야기입니다).

다른 3 세대 언어와 마찬가지로 COBOL은 C 프로그램에서와 거의 같은 방식으로 데이터 파일을 조작합니다. 그것에 대해 이상하거나 신비하거나 마법 같은 것은 없습니다. 언어의 파일 I/O 기능을 사용하여 파일을 열고 읽고 작성하고 닫습니다.

실제 파일과 프로그램 사이의 링크를 형성하는 데 다양한 메커니즘이 사용됩니다. 여기의 세부 사항은 종종 작업중인 운영 체제에만 해당됩니다. 일반적으로 COBOL 구현은 실제 이름이 아닌 논리적 파일 이름을 통해 운영 환경에서 자신을 격리하려고합니다. 이 추가 된 간접은 다른 플랫폼 (예 : Windows 플랫폼의 IDE 내에서 쓰기 및 테스트 한 다음 메인 프레임에서 실행되는 프로그램)을 작성할 때 중요합니다.

다음 예제는 IBM 메인 프레임 환경과 관련이 있습니다.

IBM 메인 프레임 월드 내에서 프로그램은 배치 또는 온라인 (예 : CIC)으로 실행됩니다. CICS에서 파일 I/O를 설정하는 방법을 설명하지 않을 것입니다 (긴 이야기입니다). 파일을 조작하는 데 사용되는 프로그램은 일반적으로 배치입니다. 다음은 배치 프로그램의 작동 방식에 대한 대략적인 그림입니다.

  1. 배치 프로그램은 JCL을 통해 실행됩니다. JCL은 실행되는 프로그램 ( 'exec'문)을 식별하고 'DD'문을 사용하여 참조 할 파일을 식별하는 데 사용됩니다. DD 문의 기능은 실제 파일과 COBOL 프로그램이 파일을 참조 할 때 참조 할 이름간에 논리적 연결을 형성하는 것입니다 (앞에서 언급 한 격리 메커니즘). 예를 들어,

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

    'dd'이름 'jclddnam'을 'hlq.my.file'이라는 파일에 연결합니다. 이 부분은 플랫폼 의존적이므로 세부 사항은 운영 환경에만 해당됩니다.

  2. COBOL 프로그램의 '파일 제어'섹션에서 JCL에 정의 된 'DD 이름'을 각 I/O 문에서 사용하는 이름과 연결하여 해당 파일을 참조합니다. 이 연결은 'select'문을 사용하여 정의됩니다.
    예를 들어,

    SELECT MYFILE
    ASSIGN JCLDDNAM
    remainder of select
    

    'jcl'의 'jclddnam'과 연관된 파일 사이를 'JCL'에서 'myfile'으로 연결하여 나중에 COBOL I/O 문에서 참조 할 것입니다. 그만큼 SELECT 진술 자체는 ISO COBOL 표준의 일부입니다. 그러나 많은 COBOL 구현은 일부 비표준 범위를 정의하여 파일 하위 시스템에 대한 다양한 단점을 용이하게합니다.

  3. 'myfile'이라는 이름을 사용하여 프로그램의 '프로 시저 부서'내에서 파일을 열고 읽고 쓰기, 닫기 :

    OPEN MYFILE  
    READ MYFILE  
    CLOSE MYFILE  
    

위의 내용은 단순화되어 있으며 COBOL 내 에서이 작업을 수행하는 방법에는 여러 가지가 있습니다. 완전한 그림을 이해하려면 실제 노력, 시간 및 연습이 필요합니다. 위에서 설명한 I/O 진술은 COBOL 표준의 일부이지만 모든 공급 업체는 고유 한 범위를 가질 것입니다.

IBM COBOL은 광범위한 파일 조직 및 액세스 방법을 지원합니다. IBM Enterprise Cobol Language Reference 매뉴얼을 검토 할 수 있습니다. 여기 그러나 파일 조작에 대한 구문 및 규칙을 얻으려면 사용자 설명서 파일 읽기/쓰기에 대한 많은 좋은 예를 제공합니다 (조금 파헤쳐 야 할 것입니다. 그러나 그것은 모두 당신을 위해 배치됩니다).

COBOL 프로그램을 통해 SQL 데이터베이스를 참조하기위한 설정은 다소 다르지만 프로그램과 데이터베이스 서브 시스템 간의 연결을 설정하는 것이 포함됩니다. IBM 세계에서 이것은 JCL을 통해 이루어지며 다른 환경은 다른 메커니즘을 사용합니다.

IBM COBOL은 사전 프로세서 또는 공동 프로세서를 사용하여 데이터베이스 액세스 및 데이터 교환을 통합합니다. 예를 들어 다음 코드는 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

사이의 것들 EXEC SQL 그리고 END-EXEC 매우 간단한 SQL Select 문입니다. 콜론이 선행 한 이름은 데이터를 DB2로 전달하거나 다시 수신하는 데 사용되는 COBOL 호스트 변수입니다. 데이터베이스 액세스 루틴을 코딩 한 적이 있다면이 작업이 매우 친숙해 보일 것입니다. 이것 링크 SQL 문을 IBM Enterpirse COBOL 프로그램에 통합하기위한 간단한 소개를 제공합니다.

그건 그렇고, IBM Enterprise COBOL은 XML 문서도 작업 할 수 있습니다. 무거운 IBM 경사에 대해 죄송하지만 이것이 제가 가장 친숙한 환경입니다.

이것이 올바른 방향으로 시작되기를 바랍니다.

다른 팁

SQL을 사용하여 돈을 쓰지 않고 COBOL 신청서에서 데이터를 검색 할 수 없다고 누가 말했습니까?

내가 일했던 회사는 SQLITE와 함께 그 일을했습니다. 공개 도메인 라이브러리 의이 작은 보석은 SQL 문을 바이트 코드로 컴파일 한 다음 실행합니다.

COBOL 파일을 다루는 C 라이브러리에 대한 사용자 정의 인터페이스로 SQLITE의 "백엔드"레벨을 대체함으로써 다른 언어에서 COBOL 데이터를 쿼리 할 수있었습니다. 물론 SQLITE의 한계 내에서 작동했지만 안정적이었고, 충분히 관계처럼 보였고 DB 서버조차 필요하지 않았습니다 :-).

전통적인 COBOL 배치 환경은 COBOL 프로그램의 '데이터 섹션'을 사용하여 데이터베이스 연결을 직접 선언하며 JCL에서 설정되었습니다. COBOL은 SQL을 선행하기 때문에 다양한 유형의 데이터베이스 인 경향이 있었지만 IBM은 SQL이 DB/2와 함께 작동했을 가능성이 높습니다. 나는이 물건에 더 가까운 누군가로부터 또 다른 대답을 얻을 것이라고 생각합니다. 다른 언어와 함께 사용할 수있는 SQL 사전 처리기를 보면 아이디어가 나타납니다. 커서는 기본 데이터 유형이되어 쿼리 결과를 기본 변수에 전달합니다.

메인 프레임 Cobol은 임베디드 SQL (SQLJ와 유사한 SQLJ)을 사용합니다.

절차 부서.

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

이 경우 호스트 변수 WS-COL0, WS-COL1 및 WS-COL2는 작업 저장 섹션에 정의됩니다. 데이터베이스 인터페이스는 해당 데이터를 올바른 위치에 가져옵니다.

실제로 분산 된 것들에 비해 매우 쉽습니다.

내가 일한 모든 IBM 메인 프레임 상점은 관계형 데이터베이스와 대화하는 COBOL을 사용했습니다. 일반적으로 IBM의 DB2였습니다. DB2는 메인 프레임에서 실행되는 관계형 데이터베이스입니다. Windows 또는 Linux에서도 실행할 수도 있습니다.

20 년 전 DB2 메인 프레임 데이터베이스에 데이터를 입력하는 우세한 방법은 CIC를 사용하는 것이 었습니다. CICS는 문자 기반 데이터 입력 화면으로 구성된 "프리젠 테이션 레벨"소프트웨어입니다. CIC를 PHP 또는 ASP.NET의 기능적 등급으로 고려하십시오.

오늘날 데이터를 DB2로 가져 오는 더 많은 옵션이 있습니다. CICS는 여전히 옵션이지만 "프리젠 테이션 계층"은 PHP, ASP.NET, WIN Forms, Java JSF, PowerBuilder 일 수 있습니다. 핵심은 개발 플랫폼이 DB2 데이터베이스 드라이버와 함께 작업 할 수 있어야한다는 것입니다. 플랫폼은 Windows, Linux 및 아마도 다른 것일 수 있습니다.

내 요점은 데이터가 여러 플랫폼에서 여러 가지 방법으로 메인 프레임 DB2 데이터베이스에 들어갈 수 있다는 것입니다. COBOL 언어는 데이터 입력,보고, 데이터 COBOL 변경 등에 관여 할 수 있지만 Windows, 웹 및 메인 프레임이 될 수있는 여러 계층 애플리케이션의 일부일 수 있습니다. 인턴쉽에서 작업 할 응용 프로그램에 대한 자세한 정보가 있으면 구체적인 예를 제시 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top