(57)【要約】【課題】  データベースの表のデータをカーソル定義文を使って参照、更新、削除するデータ処理プログラムを自動的に生成する。【解決手段】  手段101 は仕様１を入力する。仕様１から、手段102 はプログラムカスタマイズ情報を、手段103 は入力表項目定義とセレクト項目定義とセレクト条件定義を、手段104 は出力表項目定義と出力表処理定義を、それぞれ取り出す。手段105 は手段103 で取得された情報からカーソル定義文を、手段106,107は手段104 で取得された情報から作業変数定義文、指定された処理種別（挿入、更新、削除）に応じた出力処理文を、それぞれ生成する。手段109 は、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトン108 の該当挿入位置に、プログラムカスタマイズ情報とカーソル定義文と作業変数定義文と出力処理文を挿入してプログラム２を生成する。【選択図】      図１
2004213698.tif 000002
【特許請求の範囲】
【請求項１】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラム自動生成システムであって、仕様から取得した情報に基づいて、カーソル定義文、作業変数定義文、出力処理文を生成する手段と、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当箇所に、前記生成されたカーソル定義文、作業変数定義文、出力処理文、および前記仕様中のプログラムカスタマイズ情報を挿入して前記データ処理プログラムを完成させ、出力する手段とを含むデータ処理プログラム自動生成システム。
【請求項２】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラム自動生成システムであって、プログラム名と入力表項目定義とセレクト項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力する仕様入力手段と、前記仕様入力手段で入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すプログラムスケルトンカスタマイズ情報取得手段と、前記仕様入力手段で入力された仕様から入力表項目定義とセレクト項目定義とセレクト条件定義を取り出すカーソル定義情報取得手段と、前記仕様入力手段で入力された仕様から出力表項目定義と出力表処理定義を取り出す出力項目処理情報取得手段と、前記カーソル定義情報取得手段で取得された情報からカーソル定義文を生成するカーソル定義文生成手段と、前記出力項目処理情報取得手段で取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成する作業変数定義文生成手段と、前記出力項目処理情報取得手段で取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成する出力処理文生成手段と、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、前記プログラムスケルトンカスタマイズ情報取得手段で取得したプログラム名とプログラムカスタマイズ情報と、前記カーソル定義文生成手段で生成したカーソル定義文と、前記作業変数定義文生成手段で生成した作業変数定義文と、前記出力処理文生成手段で生成した出力処理文とを挿入することによってプログラムを完成させ、出力するプログラム自動合成手段とを有するデータ処理プログラム自動生成システム。
【請求項３】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラム自動生成システムであって、プログラム名と入力表項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力する仕様入力手段と、前記仕様入力手段で入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すプログラムスケルトンカスタマイズ情報取得手段と、前記仕様入力手段で入力された仕様から入力表項目定義とセレクト条件定義と出力表処理定義とを取り出すカーソル定義情報取得手段と、前記仕様入力手段で入力された仕様から出力表項目定義と出力表処理定義を取り出す出力項目処理情報取得手段と、前記カーソル定義情報取得手段で取得された入力表項目定義とセレクト条件定義と出力表処理定義とからセレクト項目定義を作成し、該作成したセレクト項目定義と前記カーソル定義情報取得手段で取得されたセレクト条件定義とからカーソル定義文を生成するカーソル定義文生成手段と、前記出力項目処理情報取得手段で取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成する作業変数定義文生成手段と、前記出力項目処理情報取得手段で取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成する出力処理文生成手段と、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、前記プログラムスケルトンカスタマイズ情報取得手段で取得したプログラム名とプログラムカスタマイズ情報と、前記カーソル定義文生成手段で生成したカーソル定義文と、前記作業変数定義文生成手段で生成した作業変数定義文と、前記出力処理文生成手段で生成した出力処理文とを挿入することによってプログラムを完成させ、出力するプログラム自動合成手段とを有するデータ処理プログラム自動生成システム。
【請求項４】
仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンを複数種類格納するプログラムスケルトンライブラリと、前記プログラムスケルトンライブラリから利用者の指定した１つのプログラムスケルトンを選択し、前記プログラム自動合成手段に渡すプログラムスケルトン選択手段とを備えた請求項２または３記載のデータ処理プログラム自動生成システム。
【請求項５】
前記仕様入力手段は、処理で使用する全ての入力表名と出力表名を入力し、データベースの表定義情報から当該入力表と出力表の全ての項目名と型情報を検索して取得すると共に、これを画面上に提示して仕様記述者による入力表項目定義および出力表項目定義以外の仕様情報の指定を可能とする構成を有する請求項２、３または４記載のデータ処理プログラム自動生成システム。
【請求項６】
前記プログラムスケルトンはデバグ用トレース文を含み、前記プログラム自動合成手段は、デバグ用のプログラムを生成するのか、本番用のプログラムを生成するのかの別を示す生成プログラム識別情報に従って、前記プログラムスケルトン中のデバグ用トレース文を取り去るか、残すかを切りわける構成を有する請求項２、３、４または５記載のデータ処理プログラム自動生成システム。
【請求項７】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラム自動生成方法であって、（ａ）プログラム名と入力表項目定義とセレクト項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力するステップと、（ｂ）ステップａで入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すステップと、（ｃ）ステップａで入力された仕様から入力表項目定義とセレクト項目定義とセレクト条件定義を取り出すステップと、（ｄ）ステップａで入力された仕様から出力表項目定義と出力表処理定義を取り出すステップと、（ｅ）ステップｃで取得された情報からカーソル定義文を生成するステップと、（ｆ）ステップｄで取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成するステップと、（ｇ）ステップｄで取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成するステップと、（ｈ）前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、ステップｂで取得したプログラム名とプログラムカスタマイズ情報と、前記生成したカーソル定義文と、前記生成した作業変数定義文と、前記生成した出力処理文とを挿入することによってプログラムを完成させ、出力するプログラムステップとを含むデータ処理プログラム自動生成方法。
【請求項８】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラム自動生成方法であって、（ａ）プログラム名と入力表項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力するステップと、（ｂ）ステップａで入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すステップと、（ｃ）ステップａで入力された仕様から入力表項目定義とセレクト条件定義と出力表処理定義とを取り出すステップと、（ｄ）ステップａで入力された仕様から出力表項目定義と出力表処理定義を取り出すステップと、（ｅ）ステップｃで取得された入力表項目定義とセレクト条件定義と出力表処理定義とからセレクト項目定義を作成し、該作成したセレクト項目定義と前記セレクト条件定義とからカーソル定義文を生成するステップと、（ｆ）ステップｄで取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成するステップと、（ｇ）ステップｄで取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成するステップと、（ｈ）前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、ステップｂで取得したプログラム名とプログラムカスタマイズ情報と、前記生成したカーソル定義文と、前記生成した作業変数定義文と、前記生成した出力処理文とを挿入することによってプログラムを完成させ、出力するステップとを含むデータ処理プログラム自動生成方法。
【請求項９】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラムを自動生成するプログラムを記録した媒体であって、コンピュータを、プログラム名と入力表項目定義とセレクト項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力する仕様入力手段、前記仕様入力手段で入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すプログラムスケルトンカスタマイズ情報取得手段、前記仕様入力手段で入力された仕様から入力表項目定義とセレクト項目定義とセレクト条件定義を取り出すカーソル定義情報取得手段、前記仕様入力手段で入力された仕様から出力表項目定義と出力表処理定義を取り出す出力項目処理情報取得手段、前記カーソル定義情報取得手段で取得された情報からカーソル定義文を生成するカーソル定義文生成手段、前記出力項目処理情報取得手段で取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成する作業変数定義文生成手段、前記出力項目処理情報取得手段で取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成する出力処理文生成手段、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、前記プログラムスケルトンカスタマイズ情報取得手段で取得したプログラム名とプログラムカスタマイズ情報と、前記カーソル定義文生成手段で生成したカーソル定義文と、前記作業変数定義文生成手段で生成した作業変数定義文と、前記出力処理文生成手段で生成した出力処理文とを挿入することによってプログラムを完成させ、出力するプログラム自動合成手段、として機能させるプログラムを記録したコンピュータ可読記録媒体。
【請求項１０】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成するデータ処理プログラムを自動生成するプログラムを記録した媒体であって、コンピュータを、プログラム名と入力表項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力する仕様入力手段、前記仕様入力手段で入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すプログラムスケルトンカスタマイズ情報取得手段、前記仕様入力手段で入力された仕様から入力表項目定義とセレクト条件定義と出力表処理定義とを取り出すカーソル定義情報取得手段、前記仕様入力手段で入力された仕様から出力表項目定義と出力表処理定義を取り出す出力項目処理情報取得手段、前記カーソル定義情報取得手段で取得された入力表項目定義とセレクト条件定義と出力表処理定義とからセレクト項目定義を作成し、該作成したセレクト項目定義と前記カーソル定義情報取得手段で取得されたセレクト条件定義とからカーソル定義文を生成するカーソル定義文生成手段、前記出力項目処理情報取得手段で取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成する作業変数定義文生成手段、前記出力項目処理情報取得手段で取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成する出力処理文生成手段、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、前記プログラムスケルトンカスタマイズ情報取得手段で取得したプログラム名とプログラムカスタマイズ情報と、前記カーソル定義文生成手段で生成したカーソル定義文と、前記作業変数定義文生成手段で生成した作業変数定義文と、前記出力処理文生成手段で生成した出力処理文とを挿入することによってプログラムを完成させ、出力するプログラム自動合成手段、として機能させるプログラムを記録したコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムの自動生成に関し、特に、情報処理システム上に構築されたデータベースの表のデータを参照してデータ処理を行い、処理結果を再度データベースの表に格納したり、処理結果に基づいてデータベースの表のデータを更新したり、削除したりするデータ処理プログラムを自動的に生成する技術に関する。
【背景技術】
【０００２】
人間にとって理解し易い仕様記述から、そこに記述されたユーザの要求を満足するプログラムを自動的に生成するプログラム自動生成技術については、従来より各種のプログラムを対象に研究、開発が進められている。
【０００３】
例えば特開平１−１４７６２１号公報（以下、文献１と称す）では、バッチ処理業務の入出力となる、ファイル、帳票等の各入出力データに対し、（１）該ファイル・帳票が含む各データ項目の桁数、型などの属性を定義したデータレイアウト仕様情報、（２）該出力ファイル・帳票が含む各データの値を得るための計算式仕様情報を入力する手段と、入力された該仕様情報より、対応するバッチ処理業務プログラムを生成する手段と有する情報処理システムにおいて、仕様情報の入力手段に、ファイル・帳票等のデータ入出力順序、計算順序等の実行順序情報を入力するステップを有し、プログラムを生成する手段に、該実行順序情報から、生成すべきプログラムのプログラム構造情報を生成するステップを有するプログラム自動生成方法が提案されている。
【０００４】
前記文献１に示された従来技術（以下、第１の従来技術と称す）の構成を図４１に示す。図４１を参照すると、第１の従来技術では、仕様入力部から入力された仕様のうち、入出力関係仕様とレイアウト仕様とからデータ定義部を生成し、入出力関係仕様と生成式仕様とからデータ編集部を生成し、入出力関係仕様とデシジョンテーブル仕様とからプログラム構造を生成し、プログラム結合部でデータ定義部とデータ編集部とプログラム構造とを結合し、プログラムを生成している。
【０００５】
また、特開平３−１８２９３２号公報（以下、文献２と称す）では、ＣＯＢＯＬ言語のプログラムにＳＱＬ言語のプログラムを埋め込んで記述する際の一般的な問題点として、ＣＯＢＯＬの言語とＳＱＬ言語の仕様が異なり、プログラム作成に考慮すべき点が多く、ユーザの誤りを誘発したり、記述量の増大を招き生産性を低下させる点を解決し、誤りの防止と生産性向上を目的としたプログラム自動生成技術が提案されている。
【０００６】
前記文献２に示された従来技術（以下、第２の従来技術と称す）の構成を図４２に示す。図４２を参照すると、第２の従来技術では、処理仕様を入力し、データ部解析と手続き部解析とを行ない、定義体を入力して、ＳＱＬ宣言節とＳＱＬ連絡領域展開文とを自動生成している。
【０００７】
【特許文献１】特開平１−１４７６２１号公報
【特許文献２】特開平３−１８２９３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
このように各種のプログラムをターゲットにしてその自動生成技術が提案されているが、情報処理システム上に構築されたデータベースの表のデータをカーソル定義文を使用して参照、更新、削除するデータ処理プログラムの自動生成技術を記載した文献は見当たらない。即ち、第１の従来技術は、通常のファイルや帳票を扱うプログラムの自動生成であってデータベースの利用は想定されておらず、また第２の従来技術では、カーソル定義文の自動生成は行われていない。
【０００９】
一般に、通常のファイルや帳票を扱うプログラムでは、入力となるファイルからデータを取得し、計算処理を行い、新規ファイルにその結果を格納する。このため第１の従来技術でも、出力処理として新規ファイル・帳票の作成を前提としており、既存ファイルのデータの削除や変更は行っていない。しかし、データベースシステムの場合は、既存表のレコード単位の更新や削除を安全に実施できるという特長があるため、データベースを利用したデータ処理プログラムでは、どの表のどの部分を処理するかを示すカーソル定義文に従って、入力となる表からデータを取得し、計算処理を行い、その結果に基づいて、新規表を作成したり、既存表を更新したり、削除したりすることが、広く行われている。
【００１０】
このようなデータ処理プログラムを、従前と同様に、詳細設計書を参照しながら人手で作成する場合にあっては、工数が多く掛かり、人手によるミスが防止しきれず、詳細設計書とプログラムの一貫性が保証できないなどの問題点が生じる。また、大規模な業務用プログラムを開発する場合には、データベースやネットワークへのアクセス障害、システムの障害が発生した場合の処理等を業務要件と共に実装する必要があるが、業務用プログラムの開発経験が浅いプログラマには困難で、開発されたプログラムの品質の劣化や開発の生産性の低下等の問題点が生じる。このため、この種のデータ処理プログラムの自動生成技術は重要な課題となっている。
【００１１】
本発明の目的は、データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成し得るようにすることにある。
【００１２】
また本発明の別の目的は、業務要求の仕様に記述すべき情報の種類を削減することにより、利用者の仕様記述の手間を削減し得るようにすることにある。
【００１３】
また本発明の他の目的は、同じ業務要求の仕様から様々なデータ処理プログラムを自動生成することができるようにすることにある。
【課題を解決するための手段】
【００１４】
データベースの表のデータを参照、更新、削除するデータ処理プログラムを自動的に生成する本発明のデータ処理プログラム自動生成システムは、仕様から取得した情報に基づいて、カーソル定義文、作業変数定義文、出力処理文を生成する手段と、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当箇所に、前記生成されたカーソル定義文、作業変数定義文、出力処理文、および前記仕様中のプログラムカスタマイズ情報を挿入して前記データ処理プログラムを完成させ、出力する手段とを含む。より具体的には、プログラム名と入力表項目定義とセレクト項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含む仕様を入力する仕様入力手段と、前記仕様入力手段で入力された仕様からプログラムスケルトンをカスタマイズするための情報として、プログラム名とプログラムカスタマイズ情報を取り出すプログラムスケルトンカスタマイズ情報取得手段と、前記仕様入力手段で入力された仕様から入力表項目定義とセレクト項目定義とセレクト条件定義を取り出すカーソル定義情報取得手段と、前記仕様入力手段で入力された仕様から出力表項目定義と出力表処理定義を取り出す出力項目処理情報取得手段と、前記カーソル定義情報取得手段で取得された情報からカーソル定義文を生成するカーソル定義文生成手段と、前記出力項目処理情報取得手段で取得された出力表項目定義のうち、処理種別が挿入である出力表に対応するものから作業変数定義文を生成する作業変数定義文生成手段と、前記出力項目処理情報取得手段で取得された出力表項目定義と出力表処理定義から、処理種別が挿入の場合は処理条件文と項目計算文と挿入文とを含む出力処理文を生成し、処理種別が更新の場合には処理条件文と更新文とを含む出力処理文を生成し、処理種別が削除の場合には処理条件文と削除文とを含む出力処理文を生成する出力処理文生成手段と、前記データ処理プログラムのうち、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンの該当挿入位置に、前記プログラムスケルトンカスタマイズ情報取得手段で取得したプログラム名とプログラムカスタマイズ情報と、前記カーソル定義文生成手段で生成したカーソル定義文と、前記作業変数定義文生成手段で生成した作業変数定義文と、前記出力処理文生成手段で生成した出力処理文とを挿入することによってプログラムを完成させ、出力するプログラム自動合成手段とを有する。
【００１５】
このように、利用者が作成した仕様から、カーソル定義文、作業変数定義文、出力処理文を生成し、予め用意されたプログラムスケルトンの該当挿入箇所にこれらを挿入することにより、データベースの表のデータをカーソル定義文を使って参照、更新、削除するデータ処理プログラムを自動的に生成することができる。また、仕様中のプログラムカスタマイズ情報もプログラムスケルトンの該当箇所に挿入できるので、利用者がプログラムカスタマイズ情報として指定した例えば初期処理や終了処理などを組込むことができ、プログラムのカスタマイズ化も容易に行える。更に、プログラムスケルトンが仕様の如何に関わらず固定的に有するプログラム部分の一部に、データベースアクセスでエラーが発生した場合の処理プログラムや、多人数で開発する場合に守らなければならないプログラム規約を遵守するプログラム等を事前に設定しておくことで、この部分を作成するユーザの負担を軽減でき、またユーザミスを防止できる。
【００１６】
また本発明のデータ処理プログラム自動生成システムは、仕様に記述すべき情報の種類を削減することにより、利用者の仕様記述の手間を削減し得るようにするために、別の一構成として、カーソル定義文生成手段が、入力表項目定義とセレクト条件定義と出力表処理定義とからセレクト項目定義を作成し、この作成したセレクト項目定義とセレクト条件定義とからカーソル定義文を生成する。これによって、利用者はセレクト項目定義を作成する手間を省くことができる。また、他の構成として、仕様入力手段が、処理で使用する全ての入力表名と出力表名を入力し、データベースの表定義情報から当該入力表と出力表の全ての項目名と型情報を検索して取得する。これによって、利用者は入力表項目定義および出力表項目定義を作成する手間を省くことができる。更に、入力仕様手段は、前記取得した入力表と出力表の全ての項目名と型情報を画面上に提示して仕様記述者による入力表項目定義および出力表項目定義以外の仕様情報の指定を可能にすることで、出力表項目定義、出力表処理定義、セレクト条件定義などの記述を容易ならしめている。
【００１７】
また本発明のデータ処理プログラム自動生成システムは、同じ業務要求の仕様から様々なデータ処理プログラムを自動生成することができるようにするために、仕様の如何に関わらず固定の部分のプログラムと仕様によって変化する部分のプログラム断片の挿入位置とを含むプログラムスケルトンを複数種類格納するプログラムスケルトンライブラリと、このプログラムスケルトンライブラリから利用者の指定した１つのプログラムスケルトンを選択し、前記プログラム自動合成手段に渡すプログラムスケルトン選択手段とを備えるようにしている。
【発明の効果】
【００１８】
以上説明したように、本発明によれば、ソフトウェア開発者が、データベースの表のデータをカーソル定義文を使って新規作成、更新、または削除を行うデータ処理プログラムを開発する際、処理の仕様を記述するだけで、そこからプログラムを自動的に生成し、利用することができる。
【００１９】
また、セレクト項目定義を自動生成する構成にあっては、その分だけソフトウェア開発者の仕様記述の手間が省け、また誤りを作り込む危険性を少なくすることができる。同様に、データベースの表定義情報から入力表項目定義、出力表項目定義を検索して取得する構成にあっては、その分だけソフトウェア開発者の仕様記述の手間が省け、また誤りを作り込む危険性を少なくすることができる。
【００２０】
また、複数種のプログラムスケルトンから任意のプログラムスケルトンを選択できる構成にあっては、同じ業務要求の仕様から、異なるプログラミング言語によるプログラム、異なるアルゴリズムによるプログラム、異なる異常系処理方式に基づくプログラム等、様々なデータ処理プログラムを自動生成することができる。
【００２１】
また、プログラムの全体が自動生成されるため、プログラム作成を人手で行う必要が無くなり、プログラム開発の手間を大きく削減することができる。
【００２２】
また、プログラム開発において、人手の作業が大幅に削減されることから、人手作業によるミス混入の機会が大幅に減るため、プログラムへのミスの混入を大幅に削減することができる。
【００２３】
また、プログラムスケルトン内に、データベースやネットワークへのアクセス障害、システムの障害が発生した場合の処理等、経験豊富なプログラム開発者のノウハウが詰まった処理を埋め込んでおくことにより、業務要件だけを記述した仕様からこれらの複雑な処理を行なうプログラムを自動生成できるため、業務用プログラムの開発経験の浅いプログラム開発者でも、経験者と同等な高品質なプログラムを開発できる。
【００２４】
また、システムの保守をする際、プログラムではなく、仕様で保守を行うことができ、保守を大幅に容易化できることである。その理由は、仕様からプログラムを自動生成できると、仕様とプログラムが１対１に対応することになり、システムに修正が必要となった場合に、プログラムを直接修正するのではなく、仕様を修正し、修正された仕様からプログラムを自動生成することで、保守を行うことができるからである。
【発明を実施するための最良の形態】
【００２５】
次に本発明の実施の形態の例について図面を参照して詳細に説明する。
【００２６】
〔第１の実施の形態〕図１は本発明のデータ処理プログラム自動生成システムの第１の実施の形態の構成例を示したブロック図、図１７はその処理の概略を示すフローチャートである。まず、図１及び図１７を参照して第１の実施の形態の概要を説明する。
【００２７】
図１において、業務要件を示す仕様１は、開発するプログラムが満足すべき仕様として、プログラム名と入力表項目定義とセレクト項目定義と出力表項目定義と出力表処理定義とセレクト条件定義とプログラムカスタマイズ情報とを含んでいる。まず、図１７の1701において、仕様入力手段101 はこのような仕様１を入力する。次に、プログラムスケルトンカスタマイズ情報取得手段102 は、入力された仕様のうち、プログラムスケルトンをカスタマイズするために必要な情報として、プログラム名とプログラムカスタマイズ情報を取り出し、プログラム自動合成手段109 に渡す(1702)。また、カーソル定義情報取得手段103 は、入力された仕様のうち、カーソル定義文を生成するのに必要な情報として、入力表項目定義とセレクト項目定義とセレクト条件定義を取り出し、カーソル定義文生成手段105 に渡す(1703)。更に、出力項目処理情報取得手段104 は、入力された仕様のうち、作業変数定義文と出力処理文を生成するのに必要な情報として、出力表項目定義と出力表処理定義とを出力項目処理情報として取り出し、作業変数定義文生成手段106 と出力処理文生成手段107 に渡す(1704)。
【００２８】
次にカーソル定義文生成手段105 は、カーソル定義情報取得手段103 から受けとった情報を加工し、データベースの表の内、仕様で指定された処理において参照される表と項目の定義を行なう、カーソル定義文を生成し、プログラム自動合成手段109 に渡す(1705)。また、作業変数定義文生成手段106 は、出力項目処理情報取得手段104 から受けとった情報を加工し、生成プログラム中の、処理種別が挿入である全ての出力表の各項目の計算結果を保存するための変数定義文を生成し、プログラム自動合成手段109 に渡す(1706)。更に、出力処理文生成手段107は、出力項目処理情報取得手段104 から受けとった情報を加工し、生成プログラム中の全ての出力表のうち、処理種別が挿入の出力表に対しては処理条件文と項目計算文と挿入文とからなる出力処理文を生成し、処理種別が更新の出力表に対しては処理条件と更新文とからなる出力処理文を生成し、処理種別が削除の出力表に対しては処理条件文と項目計算文と削除文とからなる出力処理文を生成し、プログラム自動合成手段109 に渡す(1707)。
【００２９】
また図１において、プログラムスケルトン108 は、生成プログラムのうち、仕様としてどのような業務要件が与えられても変化しない部分を、プログラムの骨組みとして用意したものである。このプログラムの骨組みにはプログラム名、カーソル定義文、作業変数定義文、出力処理文の部分と、さらに必要に応じて１つ以上のプログラムの断片の挿入位置が埋め込まれており、これらの挿入位置に、仕様で与えられた業務要件から生成されたプログラムの断片を挿入することにより、完成したプログラムを得ることを目的としたものである。
【００３０】
プログラム自動合成手段109 は、プログラムスケルトン108 の挿入位置の内、プログラム名に対応する挿入位置にプログラムスケルトンカスタマイズ情報取得手段102 で取得されたプログラム名を挿入し、カーソル定義文に対応する挿入位置にカーソル定義文生成手段105 で生成されたカーソル定義文を挿入し、作業変数定義文に対応する挿入位置に作業変数定義文生成手段106 で生成された作業変数定義文を挿入し、出力処理文に対応する挿入位置に出力処理文生成手段107 で生成された出力処理文を挿入し、その他の挿入位置にプログラムスケルトンカスタマイズ情報取得手段102 で取得した対応するプログラム文の断片を挿入することによりプログラムを自動合成する(1708)。
【００３１】
次に本発明の第１の実施の形態の詳細を図１から図５を参照して説明する。
【００３２】
図２（ａ）は図１の仕様１の構成例を示した図である。201 は仕様全体を表しており、図１における仕様１に対応する。図２（ａ）に示したように、仕様201は、仕様から生成したプログラムが持つべき名前であるプログラム名202 と、入力表の名前と各項目の名前と型の情報を含む入力表項目定義203 と、入力表項目のうち、本仕様で指定する処理で実際に使用するため、セレクト文内に定義する項目の名前を含むセレクト項目定義204 と、出力表の名前と各項目の名前と型の情報を含む出力表項目定義205 と、各出力表の処理を行う条件を示す処理条件と、挿入、更新、削除の別を示す処理種別と、処理種別が更新と削除の場合に更新／削除するための条件を示す更新／削除条件と、処理種別が挿入と更新の場合に各項目の値を計算する処理式とを含む出力表処理定義206 と、入力表からデータを取得する際の条件を含むセレクト条件定義207 と、プログラムスケルトンをカスタマイズするために必要なその他の情報を含むプログラムカスタマイズ情報208 とから構成される。
【００３３】
出力表処理定義206 に必要な、処理種別毎の情報を図２（ｂ）に一覧表で示す。図２（ｂ）を参照すると、処理種別が挿入の場合には、処理式は必須であり、処理条件は任意であり、更新／削除条件は不要である。処理種別が更新の場合には、処理式と更新条件は必須であり、処理条件は任意である。処理種別が削除の場合には、削除条件は必須であり、処理条件は任意であり、処理式は不要である。なお、処理条件が指定されなかった場合には、常に処理条件が成立するものとして、その処理が行われる。図１の仕様入力手段101 は、図２のような構成を持つ仕様を入力し、プログラムスケルトンカスタマイズ情報取得手段102 と、カーソル定義情報取得手段103 と出力項目処理情報取得手段104 に渡す。
【００３４】
プログラムスケルトンカスタマイズ情報取得手段102 は、仕様入力手段101 から渡された仕様情報から、図２のプログラム名202 とプログラムカスタマイズ情報208 に対応する部分を取り出し、プログラム自動合成手段109 に渡す。カーソル定義情報取得手段103 は、仕様入力手段101 から渡された仕様情報から、図２の入力表項目定義203 とセレクト項目定義204 とセレクト条件定義207 に対応する部分を取り出し、カーソル定義文生成手段105 に渡す。出力項目処理情報取得手段104 は、仕様入力手段101 から渡された仕様情報から、図２の出力表項目定義205 と出力表処理定義206 に対応する部分を取り出し、作業変数定義文生成手段106 と出力処理文生成手段107 に渡す。
【００３５】
次にカーソル定義文生成手段105 の動作について、図３を用いて説明する。図３は、カーソル定義文生成手段105 の動作を表す流れ図である。図１のカーソル定義文生成手段105 は、図３の301 でカーソル定義情報取得手段103 から入力表項目定義情報とセレクト項目定義情報とセレクト条件定義情報をカーソル定義情報として受けとる。302 では、入力表項目定義情報のうち、セレクト項目定義情報内に指定された項目名だけを抜きだし、生成するプログラミング言語の構文に従った形式でセレクト項目列を作成する。303 では、入力表項目定義情報内に指定された入力表のうち、セレクト項目定義情報で使用されている入力表の名前だけを抜きだし、生成するプログラミング言語の構文に従った形式でセレクト表列を作成する。304 では、セレクト条件定義情報を、生成するプログラム言語の構文に従った形式に加工し、セレクト条件文を作成する。305 では、302 、303 、304 でそれぞれ作成した、セレクト項目列、セレクト表列、セレクト条件をカーソル定義スケルトンの対応する挿入位置に挿入し、カーソル定義文を作成する。306 でこのカーソル定義文を出力し、図１のプログラム自動合成手段109 に渡す。
【００３６】
図７にカーソル定義スケルトンの構成例を示す。図７を参照すると、カーソル定義文スケルトン701 は、特定のプログラミング言語に依存したスケルトンで、セレクト項目列挿入位置702 、入力表列挿入位置703 、セレクト条件挿入位置704 を持って構成されている。これらの空白部分に、図１のカーソル定義文生成手段で作成した、それぞれ、セレクト項目列、入力表列、セレクト条件が挿入され、カーソル定義文となる。
【００３７】
次に作業変数定義文生成手段106 の動作について、図４を用いて説明する。図４は、作業変数定義文生成手段106 の動作を表す流れ図である。図１の作業変数定義文生成手段106 は、図４の401 で出力項目処理情報取得手段104 から出力表項目定義情報を受けとる。出力表は一般に１つ以上指定可能だが、処理種別が更新や削除である出力表については、作業変数定義が不要なため、処理種別が挿入である出力表について、402 が繰り返される。402 の中では、ステップ403 から405 が行なわれる。403 において、出力表のレコード型を定義する型定義文を作成する。404 において、作業領域変数を403 で定義された型で定義する文を作成する。405 では、403 で作成した型定義文と404 で作成した変数定義文を作業変数定義スケルトンの対応する挿入位置に挿入する。406 ステップでは、402 の繰り返しによって完成した作業変数定義文列を出力し、図１のプログラム自動生成手段109 に渡す。
【００３８】
図８に作業変数定義スケルトンの構成例を示す。図８を参照すると、作業変数定義スケルトン801 は、型定義文挿入位置802 と変数定義文挿入位置803 を持って構成されている。図４の405 では、これらの挿入位置にそれぞれ、型定義文、変数定義文を挿入し、作業変数定義文を完成させる。作業変数定義文が複数ある場合には、完成した複数の作業変数定義文をまとめて作業変数定義文列とする。
【００３９】
次に出力処理文生成手段107 の動作について、図５を用いて説明する。図５は、出力処理文生成手段107 の動作を表す流れ図である。図１の出力処理文生成手段107 は、図５の501 で出力項目処理情報取得手段104 から出力表項目定義情報と出力表処理定義情報を受けとる。出力表は一般に１つ以上指定可能なので、全ての出力表について、502 が繰り返される。503 において、501 で受け取った出力表処理定義情報のうち、処理条件情報から処理条件文が作成される。504 では、501 で受け取った出力表処理定義情報のうち、処理種別情報が検査され、その値によって以後の処理が分岐する。処理種別情報が挿入の場合には、ステップ505 から507 が、処理種別情報が更新の場合には、ステップ508 から509 が、処理種別情報が削除の場合には、ステップ510 から511 が、実行される。
【００４０】
505 では、出力表処理定義情報のうち、各項目の処理式を加工し、項目計算文を作成する。506 では、出力表項目定義情報を加工し、挿入文を作成する。507では、503 で作成した処理条件文と、505 で作成した項目計算文と、506 で作成した挿入文を出力処理スケルトンの対応する挿入位置に挿入し、出力処理文を完成する。
【００４１】
508 では、出力表処理定義情報のうちの各項目の処理式と、出力表項目定義情報とを加工し、更新文を作成する。509 では、503 で作成した処理条件文と、508 で作成した更新文と出力処理文スケルトンの対応する挿入位置に挿入し、出力処理文を完成する。
【００４２】
510 では、出力表項目定義情報を加工し、削除文を作成する。511 では、503で作成した処理条件文と、510 で作成した削除文を出力処理文スケルトンの対応する挿入位置に挿入し、出力処理文を完成する。なお、出力種別が更新と削除の場合には、出力処理文スケルトンの項目計算文挿入位置には何も挿入しない。
【００４３】
512 では、502 の繰り返しによって完成した全ての出力処理文列を出力し、図１のプログラム自動生成手段109 に渡す。
【００４４】
図９（ａ）に出力処理文スケルトンの構成例を示す。図９（ａ）を参照すると、出力処理文スケルトン901 は、処理条件文挿入位置902 と項目計算文列挿入位置903 と出力文挿入位置904 を持って構成されている。図５の507 、509 、511では、これらの挿入位置にそれぞれ、処理条件文、項目計算文、挿入文／更新文／削除文を挿入し、出力処理文を完成させる。図９（ａ）を参照すると、処理条件文挿入位置902 に挿入された処理条件がｉｆ文の条件節になっており、この条件が満足する場合だけ、項目計算文挿入位置903 に挿入された出力項目の計算処理と出力文挿入位置904 に挿入された出力表への出力処理が実行されることがわかる。
【００４５】
図９（ｂ）から図９（ｄ）に図９（ａ）の出力文挿入位置904 に挿入される、挿入文、更新文、削除文のＰＬ／ＳＱＬ言語におけるテンプレートの例をそれぞれ示す。図９（ｂ）を参照すると、処理種別が挿入の場合、出力表項目定義情報から、出力表の名前を取り出して<<出力表名>>に代入し、項目の名前を取り出して、”，”でつないで項目名のリストを作成し、<<項目名リスト>>に代入し、項目の名前を取り出し、これをもとに、ある決まった方法で変数名を作成し、”，”でつないで変数名のリストを作成、<<変数名リスト>>に代入することで、挿入文を作成する。
【００４６】
図９（ｃ）を参照すると、処理種別が更新の場合、出力表項目定義情報から、出力表の名前を取り出して<<出力表名>>に代入し、出力表処理定義情報から処理式を取り出して、”，”でつないで更新文リストを作成し、<<更新文リスト>>に代入し、出力表処理定義情報から更新条件を取り出して<<更新条件>>に代入することで、更新文を作成する。
【００４７】
図９（ｄ）を参照すると、処理種別が削除の場合、出力表項目定義情報から、出力表の名前を取り出して<<出力表名>>に代入し、出力表処理定義情報から削除条件を取り出して<<削除条件>>に代入することで、削除文を作成する。
【００４８】
次に図１のプログラム自動合成手段109 の動作について、図１０と図６を用いて説明する。図１０はプログラムスケルトンの構成例を示した図である。プログラムスケルトンは、ある特定のプログラミング言語で記述されたプログラムを仕様により変化する部分と、仕様により変化しない部分に分類し、仕様により変化しない部分は、プログラム文として持ち、仕様により変化する部分は、仕様から作成されたプログラムの断片の挿入位置を持つことで構成される。図１０の例では、このプログラムの断片の挿入位置として、プログラム名挿入位置1002と、カーソル定義文挿入位置1003と、作業変数定義文列挿入位置1004と、" 初期処理"挿入位置1005と、出力処理文列挿入位置1006と、" 終了処理" 挿入位置1007を持っている。
【００４９】
図６は、プログラム自動合成手段109 の動作を表す流れ図である。プログラム自動合成手段109 は、プログラムスケルトン108 のうち、プログラムの断片の挿入位置に、仕様から作成したプログラムの断片を挿入することによりプログラムを完成させるものである。図６を参照すると、まず601 ステップで、図１のプログラムスケルトン108 を取り出す。602 では、プログラムカスタマイズ情報とカーソル定義文と作業変数定義文列と出力処理文列を、それぞれ、図１のプログラムスケルトンカスタマイズ情報取得手段102 、カーソル定義文生成手段105 、作業変数定義文生成手段106 、出力処理文生成手段107 から受けとる。ステップ603 では、602 で受けとったカーソル定義文をプログラムスケルトンのカーソル定義文挿入位置に挿入する。604 では、602 で受けとった作業変数定義文列をプログラムスケルトンの作業変数定義文列挿入位置に挿入する。605 では、602 で受けとった出力処理文列をプログラムスケルトンの出力処理文列挿入位置に挿入する。606 では、602 で受けとったプログラム名をプログラムスケルトンのプログラム名挿入位置に挿入し、プログラムスケルトンカスタマイズ情報を、名前で対応が示された挿入位置に挿入する。図１０のプログラムスケルトンでは、" 初期処理" と" 終了処理" がこれに当たる。ただし、仕様の記述とプログラムスケルトンが対応する限り、いくつの挿入位置を設けることも可能である。607 では、全てのプログラム断片が挿入され、完成したプログラムを出力する。
【００５０】
以上により、仕様からプログラムを自動的に作成し、出力できる。
【００５１】
なお、本説明では、カーソル定義スケルトン、作業変数定義スケルトン、出力処理文スケルトン、プログラムスケルトンは、ＰＬ／ＳＱＬ言語に従って記述し、説明しているが、他のプログラミング言語のプログラムを自動生成する場合には、生成するプログラミング言語に従ったスケルトンを用意することで、他のプログラミング言語のプログラムを生成することが可能である。
【００５２】
また、図３、図４、図５、図６の処理流れ図において、横に並列して記述されている部分は、その間の処理順序がどのような順序であっても良いことを表している。例えば、図３において、302 と303 と304 は、この順序で処理しても良いし、304 、303 、302 の順序で処理しても良いし、あるいは、これらを合わせて一緒に処理しても良いことを表している。
【００５３】
このように、本実施の形態では、プログラム開発者は、仕様として、プログラム名と入力表項目定義とセレクト項目定義と出力表項目定義と出力表項目計算処理定義とセレクト条件定義とプログラムカスタマイズ情報を指定するだけで、データ処理プログラムを自動生成させることができる。したがって、従来、プログラミング工程において混入していたミスを無くすことができ、またプログラム開発の生産性も大幅に向上させることができる。
【００５４】
〔第２の実施の形態〕次に本発明の第２の実施の形態について、第１の実施の形態との相違点を中心に説明する。
【００５５】
第１の実施の形態において、図２の仕様201 は、プログラム名202 と入力表項目定義203 とセレクト項目定義204 と出力表項目定義205 と出力表項目計算処理206 とセレクト条件207 とプログラムカスタマイズ情報208 から構成されていた。第２の実施の形態では、このうち、セレクト項目定義204 を持たずに構成される。すなわち、図１１に示したように、プログラム名1102と入力表項目定義1103と出力表項目定義1104と出力表処理定義1105とセレクト条件定義1106とプログラムカスタマイズ情報1107から構成されている。
【００５６】
第２の実施の形態では、図１の仕様入力手段101 は、図１１のような構成を持つ仕様を入力し、プログラムスケルトンカスタマイズ情報取得手段102 とカーソル定義情報取得手段103 と出力項目処理情報取得手段104 に渡す。第２の実施の形態における図１のカーソル定義情報取得手段103 は、仕様入力手段101 から渡された仕様情報から、入力表項目定義1103と出力表処理定義1105とセレクト条件定義1106に対応する部分を取り出し、カーソル定義文生成手段105 に渡す。
【００５７】
次に第２の実施の形態におけるカーソル定義文生成手段105 の詳細な処理を図１２に示す。図１２の1201では、カーソル定義情報取得手段103 から入力表項目定義情報とセレクト条件定義情報と出力表処理定義情報をカーソル定義情報として受けとる。1202では、入力表項目定義情報と出力表処理定義情報から、図１３に示すようにして、セレクト項目定義情報を作成する。以後は、図３に示した第１の実施の形態におけるカーソル定義文生成手段105 の処理方式と同一である。
【００５８】
図１３を参照すると、1301でまず、セレクト表列とセレクト項目列を空とする。1302では、全ての入力表<<表>>の全ての項目<<項目>>について1303から1306を繰り返す。1303では、<<表>>と<<項目>>の組が、つまり注目している入力表の項目が、出力表処理定義内の処理条件または処理式または更新／削除条件で使用されているかどうかをテストしている。使用されていない場合には次の繰り返し要素に移る。使用されている場合には、1304で<<表>>と<<項目>>の組をセレクト項目列に追加する。次いで1305で<<表>>がセレクト表列内にあるかどうかをテストしている。既にあった場合には、次の繰り返し要素に移る。無い場合には、1306で<<表>>をセレクト表列に追加する。全ての入力表の全ての項目について以上を繰り返した後、1307でセレクト表列とセレクト項目列を合わせてセレクト項目定義情報として出力する。
【００５９】
以上により、本発明の第１の実施の形態におけるセレクト項目定義情報を自動的に作成することができた。したがって、図１２の1203から1207の処理において、第１の実施の形態における図３と同一の動作でカーソル定義文を作成することができる。
【００６０】
他の構成要素の動作は第１の実施の形態と同一である。
【００６１】
本実施の形態では、利用者は仕様内にセレクト項目情報を指定することなく、第１の実施の形態と同じプログラムを自動生成ことができるため、第１の実施の形態と比較して、より容易に仕様を作成することができる、という効果がある。
【００６２】
〔第３の実施の形態〕次に本発明の第３の実施の形態について第１の実施の形態との相違点を中心に説明する。
【００６３】
図１４に本発明の第３の実施の形態における構成図を示す。図１４を図１と比較すると、プログラムスケルトンを一つ含む図１のプログラムスケルトン108 の代わりにプログラムスケルトンを１種類以上いくつでも保持できるプログラムスケルトンライブラリ1411を持ち、プログラムスケルトン特定情報取得手段1404とプログラムスケルトン選択手段1412が追加されている。
【００６４】
仕様1401は、図１の仕様１と比較して、プログラムスケルトン特定情報を合わせ持って構成される。この仕様の構成を図１５に示す。図１５を参照すると、仕様1501は、プログラム名1502と入力表項目定義1503とセレクト項目定義1504と出力表項目定義1505と出力表処理定義1506とセレクト条件定義1507とプログラムスケルトン特定情報1508とプログラムカスタマイズ情報1509から構成されている。
【００６５】
図１４の仕様入力手段1403は、図１５のような構成を持つ仕様を入力し、プログラムスケルトン特定情報取得手段1404と、スケルトンカスタマイズ情報取得手段1405と、カーソル定義情報取得手段1406と、出力項目処理情報取得手段1407に渡す。図１４のプログラムスケルトン特定情報取得手段1404は、仕様入力手段1403で入力された仕様からプログラムスケルトン特定情報を取り出し、プログラムスケルトン選択手段1412に渡す。プログラムスケルトン選択手段1412は、プログラムスケルトン特定情報を用いて特定されたプログラムスケルトンをプログラムスケルトンライブラリ1411から取り出し、このプログラムスケルトンをプログラム自動合成手段1413に渡す。プログラムスケルトン特定情報を用いてプログラムが特定できない場合には、仕様のエラーとして利用者にその旨通知する。プログラム自動合成手段1413は、プログラムスケルトン選択手段1412から受けとったプログラムスケルトン中の、プログラム断片の挿入位置に、プログラムスケルトンカスタマイズ情報取得手段1405から受け取ったプログラム名とプログラムカスタマイズ情報と、カーソル定義文生成手段1408から受け取ったカーソル定義文と、作業変数定義文生成手段1409から受け取った作業変数定義文列と、出力処理文生成手段1410から受け取った出力処理文列とを、第１の実施形態と同一の方式で挿入し、プログラムを完成して出力する。
【００６６】
他の構成要素の動作は第１の実施の形態と同一である。
【００６７】
本実施の形態では、様々な処理形態を実装したプログラムスケルトンを複数用意することにより、様々なデータ処理プログラムを自動生成することができる。例えば、複数のプログラミング言語によるプログラムや、異なるアルゴリズムに基づくプログラム、異なる異常処理方式に基づくプログラムを自動生成できる。より広範なプログラムを自動生成できるため、第１の実施の形態と比較して適用範囲が広くなる、という効果がある。
【００６８】
〔第４の実施の形態〕次に本発明の第４の実施の形態について第１の実施の形態との相違点を中心に説明する。
【００６９】
本実施の形態では、図１の仕様入力手段101 が仕様を入力する際にデータベース定義情報を参照して仕様を入力する点が第１の実施の形態と異なる。なお、データベース定義情報は、自動生成しようとするデータ処理プログラムが処理の対象とするデータベースの定義情報であり、図１には図示しない記憶部に格納されており、仕様入力手段101 によって参照可能になっている。図１６に第４の実施の形態における図１の仕様入力手段101 の処理の流れ図を示す。
【００７０】
図１６を参照すると、図１の仕様入力手段101 は、1601と1602でまず、処理で使用する入力表と出力表の名前だけを取得する。次いで、1603と1604とで、それぞれ、入力表と出力表の名前からデータベース定義情報を検索し、該当する入力表と出力表の項目定義情報を取得する。項目定義情報には、項目名、型、項目へのコメント等がある。1605では、1603と1604で取得した入力表と出力表の項目定義情報を画面上に提示する。1606では、1605で提示した入力表と出力表の項目定義情報を画面上で仕様入力者に利用させることにより、プログラム名、セレクト項目定義、出力表処理定義、セレクト条件定義、プログラムカスタマイズ情報を指定させ、取得する。入力表項目定義と出力表項目定義は、仕様入力手段101 がデータベース定義情報から検索したものが使用されるため、利用者は作成する必要はない。なお、第２の実施の形態に適用する場合には、セレクト項目定義の作成は不要である。
【００７１】
なお、図１６の1605と1606で入力表と出力表の項目定義情報を仕様入力者に提示し、これを利用させることによって、プログラム名、セレクト項目定義、出力表処理定義、セレクト条件定義、プログラムカスタマイズ情報を指定させ、取得する方法としては、以下の（１）と（２）の二種類がある。
【００７２】
（１）入力表と出力表の名前と各項目の項目名と型をマトリクスの一つの軸に沿って並べ、セレクト条件定義とプログラムカスタマイズ情報と出力表の各項目の名前および型をマトリクスの他の軸に沿って並べ、仕様内のセレクト項目定義とセレクト条件定義とプログラムカスタマイズ情報と出力表処理定義の指定の際に、入力表の各項目の情報を参照する時、マトリクスの対応するセルに記号をつけることによって、入力項目の値を参照可能とする。（２）入力表と出力表の名前と各項目の項目名、型を一覧表の形式で画面上に表示し、仕様入力者がセレクト項目定義とセレクト条件定義とプログラムカスタマイズ情報と出力表処理定義を指定する際に、画面上の表示領域の表名や項目名の上をマウスでクリックすることにより、該当する項目名や表名を文字情報として指定の領域に展開することで、表名や項目名を再度入力することなく仕様を入力可能とする。
【００７３】
図１の仕様１において、図２の入力表項目定義203 および出力表項目定義205については、データベースの表定義と同一の情報であり、データベースを作成する際に既に作成され、データベース内に格納されていることが普通である。本実施の形態では、処理の仕様として、改めて入力表項目定義および出力表項目定義を利用者に指定させるのではなく、利用者には、入力表と出力表の名前だけを指定させ、入力表項目定義と出力表項目定義はデータベース内に既に格納されている情報から自動的に検索し、取得することにより、利用者の仕様記述のための手間を削減し、また、人手で指定することによるミスを削減することができる、という効果がある。
【００７４】
〔第５の実施の形態〕次に本発明の第５の実施の形態について第１の実施の形態との相違点を中心に説明する。
【００７５】
本実施の形態では、図１のプログラムスケルトン108 は、デバグ用トレース文をその挿入箇所が明確に識別できるように例えば特殊な記号で囲んで挿入されている。また、仕様１には、デバグ用のプログラムを生成するのか、本番用のプログラムを生成するのかの別を示す生成プログラム識別情報が含まれている。この生成プログラム識別情報は、他の仕様情報と一緒に仕様入力手段１０１により入力され、プログラム自動合成手段109 に渡される。プログラム自動合成手段109は、この生成プログラム識別情報に従って、プログラムスケルトン108 中のデバグ用トレース文を取り去るか、残すかを切りわける。即ち、本番用のプログラムを生成する場合には、プログラムスケルトン108 中の特殊な記号で囲まれたデバグ用トレース文をその特殊な記号とともに取り去り、デバグ用のプログラムを生成する場合には、プログラムスケルトン108 中の特殊な記号で囲まれたデバグ用トレース文をそのまま残す。このとき、特殊な記号は取り去っても良く、あっても支障ない場合には残しておいても良い。
【００７６】
本実施の形態によれば、仕様１中の生成プログラム識別情報によって、デバグ用のプログラムの生成と本番用のプログラムの生成とを切り替えることができるという効果がある。
【００７７】
〔第６の実施の形態〕次に本発明の第６の実施の形態について図１８を用いて説明する。図１８を参照すると、本発明の第６の実施の形態は、ＣＰＵ、主記憶、各種の入出力装置を含むコンピュータ1800と、記録媒体1803とから構成される。なお、仕様1801は図１の仕様１に相当し、生成プログラム1802は図１の生成プログラム２に相当する。
【００７８】
記録媒体1803は、磁気ディスク、半導体メモリ、ＣＤ−ＲＯＭその他の機械読み取り可能な記録媒体であり、データ処理プログラム自動生成プログラムが記録されている。記録媒体1803に記録されたデータ処理プログラム自動生成プログラムは、コンピュータ1800の立ち上げ時などにコンピュータ1800に読み込まれ、コンピュータ1800の動作を制御することにより、コンピュータ1800上に、仕様入力手段1804と、プログラムスケルトンカスタマイズ情報取得手段1805と、カーソル定義情報取得手段1806と、出力項目処理情報取得手段1807と、カーソル定義文生成手段1808と、作業変数定義文生成手段1809と、出力処理生成手段1810と、プログラムスケルトン1811と、プログラム自動合成手段1812とを実現する。これらの機能部は図１に示した同一名称のものと同じ機能を果たす。
【００７９】
なお、本説明では、第１の実施の形態について説明したが、第２、３、４、５の実施の形態についても同様に、対応するデータ処理プログラム自動生成プログラムを記録媒体1803に記録しておくことができる。
【００８０】
次に本発明のデータ処理プログラム自動生成システムの実施例について、図１と図１９から図４０を用いて詳細に説明する。本実施例は、本発明の第２の実施の形態における実施例である。この実施例では、図１９に示す仕様から図４０に示すＰＬ／ＳＱＬというプログラム言語で記述されたプログラムを自動生成する具体的システムについてその動作を説明する。
【００８１】
図１９は、データ処理プログラム自動生成システムへの入力仕様の例である。本発明のデータ処理プログラム自動生成システムは、本仕様で指定された処理を実行するプログラムを自動的に生成するものである。
【００８２】
図１９の例では、1901では、生成されるプログラムが”URIAGE_KEISAN ”というプログラム名を持つことを指定している。1903から1910までは、この処理で使用されるデータベースの表の名前、入力なのか出力なのかの別、各表の項目名、各項目の型、さらに出力となる表については各項目の値を得るための計算処理が指定されている。本処理では、URIAESU とSHOUHIN の二つの表を入力とし、URIAGEDAKAという一つの表を出力する。表URIAGESUは、項目CODEとURIAGEを持ち、それぞれ、char(4) 、number(6) の型を持つ。char(4) は４桁の文字列であり、number(6) は６桁の数字であることを表している。表SHOUHIN についても同様に、項目CODEとNAMEとPRICE を持ち、それぞれ、char(4) 、char(20)、number(8) の型を持つ。表URIAGEDAKAは、項目CODE、NAME、TOTAL を持ち、項目CODEの値として、表URIAGESUの項目CODEの値を代入することが、項目NAMEの値として、表SHOUHIN の項目NAMEの値を代入することが、それぞれ、計算処理欄の"URIAGESU.CODE" 、"SHOUHIN.NAME"で示されている。表URIAGEDAKAの項目TOTAL の値として、表URIAGESUの項目URIAGEの値と表SHOUHIN の項目PRICE の値を掛け合わせたものを代入することが、"URIAGESU.URIAGE * SHOUHIN.PRICE" で示されている。1911では、表URIAGESUと表SHOUHIN のデータをデータベースから取得する際の条件である、セレクト条件が指定されている。ここでは、表URIAGESUの項目URIAGEの値が10より大きい場合であって、かつ、表URIAGESUの項目CODEの値と表SHOUHIN の項目CODEの値が等しい場合にだけ、表URIAGESUと表SHOUHIN からデータを入力し、処理することが示されている。1912と1913には、初期処理、終了処理として、それぞれ、"Init_module;","End_module;"という関数を呼び出すことが指定されている。
【００８３】
図１９において、1901が図１１のプログラム名1102に対応し、1903から1907が図１１の入力表項目定義1103に対応し、1908から1910の表名、項目名、型の情報が図１１の出力表項目定義1104に対応し、1908から1910の計算処理の情報が図１１の出力表処理定義1105に対応し、1911が図11のセレクト条件定義1106に対応し、1912と1913が図１１のプログラムカスタマイズ情報1107に対応する。
【００８４】
この仕様で表された処理は、商品コード(CODE)と売上数(URIAGE)を項目に持つ売上数表(URIAGESU)と、商品コード(CODE)と商品名(NAME)と価格(PRICE) を項目にもつ商品マスター表(SHOUHIN) を、同一商品コードで突き合わせ、売上数(URIAGESU)が10より大きい商品について、商品コード(CODE)と商品名(NAME)と売上総額(TOTAL) を項目にもつ売上高表(URIAGEDAKA)を作成することである。この時、売上高表の商品コード項目の値は売上数表の商品コード項目より代入し、売上高表の商品名の値は対応する商品コードの値を持つ商品マスター表の商品名項目より代入し、売上高表の売上総額項目の値を、売上数表の売上数項目の値と商品マスター表の価格項目の値の積を代入することで得ることを意味している。図２０に図１９に示した仕様の模式図を示す。ここでは、売上数表2001内のCODE項目の値、例えば２レコード目の0005と同一の値をCODE項目に持つ商品マスター表2002内のレコードは５レコード目のレコードであるため、これらのレコードが対応することになる。ここで、商品マスター2002より、商品コード0005の商品名がクッキーであり、価格が400 円であることがわかる。これにより、出力表である売上高表2003に、商品コードとして0005、商品名としてクッキー、売上総額として8,000 円(20 個 * 400円) を値に持つレコードを作成することを表している。
【００８５】
本実施例における、図１の仕様入力手段101 の詳細な動作について図２１を用いて説明する。図２１は、仕様入力手段101 の動作手順を示している。
【００８６】
図２１を参照すると、2101: で、内部変数<<内部情報>>を空にし、2102: と2103: とでそれぞれ、" プログラム名 : << プログラム名>>" と" 表 : [" という文字列を作成し、<<内部情報>>に追加している。ここで、ダブルクオートは文字列を表すが、文字列内の<<>>で囲われた項目、ここでは、<<プログラム名>>は、実際のプログラム名の値が文字列中のこの部分に入ることを表す。2104: では、2105: から2112: までの処理を、仕様内の各表について繰り返すことを示している。ここで、各繰り返しにおいて処理している表を<<表>>で表している。
【００８７】
2105: では、"(<<表>>, <<入出力区分>>, ["という文字列を作成し、<<内部情報>>に追加している。ここで、<<入出力区分>>は、" 入力" かまたは" 出力" であり、仕様の表の入出力区分の項目から得た値を指す。2106: では、<<入力区分>>が" 入力" か" 出力" かがテストされ、" 入力" だった場合には、2107: から2108: が、" 出力" だった場合には、2109: から2110: が実行される。2107: では、<<表>>の各項目について2108: が繰り返されることを示している。ここで、各項目の値を<<項目>>とする。2108: では、文字列"(<<項目>>, <<型>>)," を作成し、<<内部情報>>に追加している。2109: では、<<表>>の各項目について2110: が繰り返されることを示している。ここで、各項目の値を<<項目>>とする。2110: では、文字列"(<<項目>>, <<型>>, <<計算処理>>)," を作成し、<<内部情報>>に追加している。2111: は2106: から始まったIF文の最後であることを表している。2112: では、2108: または2110: の繰り返し処理で最後に付加された","を削除し、文字列"])"を追加している。
【００８８】
2113: では、文字列" 処理条件: <<処理条件>>" を作成し、<<内部情報>>に追加することを示している。ここで、<<処理条件>>は、仕様のセレクト条件部分に指定された文字列を指す。2114: では、仕様に指定されたその他の属性について、2115: を繰り返すことを示している。2115: では、文字列、"<< 属性名>> : << 属性値>>" を作成し、<<内部情報>>に追加している。ここで、<<属性名>>、<<属性値>>は、それぞれ、仕様内の属性の名前とその値を示している。図２の仕様例では、" 初期処理" 、" 終了処理" が属性名で"Init_module;"、"End_module;" が属性値である。
【００８９】
以上で、仕様内の情報が全て<<内部情報>>に取り込まれたことになる。図２２に図１９で示された仕様例を<<内部情報>>に取り込んだ例を示す。仕様入力手段101 は、この<<内部情報>>を、図１のプログラムスケルトンカスタマイズ情報取得手段102 、カーソル定義情報取得手段103 、出力項目処理情報取得手段104 に渡す。
【００９０】
プログラムスケルトンカスタマイズ情報取得手段102 は、仕様入力手段101 から渡された図２２に示すような<<内部情報>>から、プログラム名とプログラムカスタマイズ情報を、図２３に示す形式で取り出し、プログラム自動合成手段109に渡すものである。図２３で、* は"(<<属性名>> . << 属性値>>)"が属性名の数だけ繰り返されることを示している。なお、値はダブルクオートで囲われ、文字列として扱われる。プログラムスケルトンカスタマイズ情報取得手段102 では、図２２に示すような<<内部情報>>が渡されると、2201: と2213: と2214: とからそれぞれ属性名と属性値を取り出し、図２３の形式で<<プログラムスケルトンカスタマイズ情報>>を作成し、プログラム自動合成手段109 に渡す。図２４はこの方式によって、図２２の例から取得された<<プログラムスケルトンカスタマイズ情報>>の例を示したものである。
【００９１】
カーソル定義情報取得手段103 は、仕様入力手段101 から渡された<<内部情報>>から、入出力区分が入力である全ての表名と項目名の情報と、セレクト条件と、入出力区分が出力である全ての表の項目の計算処理の内容を取り出して<<カーソル定義情報>>を図２５の形式で作成し、カーソル定義文生成手段105 に渡すものである。図２５で、* は直前の要素が必要個数分だけ繰り返されることを示している。図２６は図２５の形式に沿って図２２の<<内部情報>>から取得された<<カーソル定義情報>>の例を示したものである。図１のカーソル定義情報取得手段103 では、図２２の<<内部情報>>が渡されると、2202: から2206: の情報を図２５の2501: の形式に変更し、<<カーソル定義情報>>内に、図２６の2601: と2602: を作成する。次いで、図２２の2211: から2212: の情報をそのまま抜きだし、<<カーソル定義情報>>内に追加する。最後に図２２の2207: から2210: の情報から、計算処理に関する部分だけを抜きだし、図１５の2503: の形式に変更し、<<カーソル定義情報>>内に、図２６の2604: と2605: と2606: を作成する。
【００９２】
図１の出力項目処理情報取得手段104 は、仕様入力手段101 から渡された<<内部情報>>から、入出力区分が出力である全ての表名と項目名と型と計算処理の情報を取り出して、<<出力項目処理情報>>を図２７の形式で作成し、作業変数定義文生成手段105 と出力処理文生成手段107 に渡すものである。図２７で、* は直前の要素が必要個数分だけ繰り返されることを示している。なお、型と計算処理の値はダブルクオートで囲われ、文字列として扱われる。
【００９３】
図２８は図２７の形式に沿って図22の<<内部情報>>から取得された<<出力項目処理情報>>の例を示したものである。出力項目処理情報取得手段104 では、図22の<<内部情報>>が渡されると、図22の2207: から2210: の情報を図27の2701: の形式に変更し、<<出力項目処理情報>>内に、図28の2801: から2807: を作成する。
【００９４】
次に図１のカーソル定義文生成手段105 の動作について図２９と図３０を用いて説明する。図３０は生成しようとしているカーソル定義文のうち、仕様の如何に関わらず、固定的な骨組みを表すスケルトンである。3001: と3008: は "--"で始まっているため、コメント文である。3002: から3007: はデータベース操作のためのセレクト文のスケルトンであり、<<Select項目挿入位置>>と<<入力表名挿入位置>>と<<条件節挿入位置>>に仕様から得られた情報を加工して挿入することで完成したセレクト文になる。3009: では3002: から3007: で定義されたセレクト文に対応したカーソル用変数W_0 が定義されている。本スケルトンの、3004: <<Select項目挿入位置>>と、3005: <<入力表名挿入位置>>と、3006: <<条件節挿入位置>>にカーソル定義情報取得手段103 から受けとった図２６の情報を基に作成したプログラム断片を挿入し、カーソル定義文を完成させて<<カーソル定義文>>とし、<<プログラム自動合成手段>>109 に渡すのがカーソル定義文生成手段105 である。
【００９５】
図３０は実施の形態で説明した図７のカーソル定義スケルトンに対応し、特定の事例としてより詳細化したものである。図３０の3004の<<セレクト項目列挿入位置>>、3005の<<入力表列挿入位置>>、3006の<<セレクト条件挿入位置>>は、それぞれ図７のセレクト項目列挿入位置702 、入力表列挿入位置703 、セレクト条件挿入位置704 に対応する。
【００９６】
次に図１のカーソル定義文生成手段105 の詳細な動作について図２９を用いて説明する。2900: では、カーソル定義情報を図１のカーソル定義情報取得手段103 から受け取る。図１９の仕様の例では、図２６がカーソル定義情報である。2901: 2902: では、繰り返し処理で用いる変数<<入力表名列>><<Select項目列>>を空にし、初期化している。2903: では、カーソル定義情報内の入力表全てに対し、2904: から2912: の処理を繰り返すことを示している。繰り返しの中で、着目している入力表は<<入力表>>で表す。2904: では、カーソル定義情報内の<<入力表>>の全項目について、2905: から2912: の処理を繰り返すことを示している。繰り返しの中で、着目している項目は<<項目>>で表す。つまり、2905: から2912: の処理は、各<<入力表>>の各<<項目>>について繰り返し処理されることになる。
【００９７】
2905: では、<<入力表>><<項目>>の組合せがカーソル定義情報内の計算処理内で使用されているかどうかが検査されている。使用されている場合には、2906:で、"<< 入力表>>.<< 項目>> << 入力表>>_<< 項目>>,"という文字列を作成し、変数<<Select項目列>>に追加する。ここで、<<入力表>>、<<項目>>は、それぞれ着目している入力表、項目の値を示す。2907: ではさらに、<<入力表>>が<<入力表名列>>に存在するかどうかが検査されている。存在する場合には何もせず(2908:) 、存在しない場合には2909: で、変数<<入力表名列>>の最後に変数<<入力表>>とコンマからなる文字列を追加する。
【００９８】
2913: と2914: では、それぞれ、変数、<<Select項目列>>と<<入力表名列>>の最後にあるコンマ"," を削除する。これは、コンマはそれぞれの要素を区切るために必要なもので、最後には必要無いためである。2915: では、仕様内のセレクト条件として指定された内容を変数<<条件節>>にセットする。2916: から2918では、それぞれ、変数、<<Select項目列>>、<<入力表名列>>、<<条件説>>の値を、図３０に示したカーソル定義スケルトンの3004: <<セレクト項目列挿入位置>>、3005: <<入力表列挿入位置>>、3006: <<セレクト条件挿入位置>>に挿入し、カーソル定義文を完成させる。完成したカーソル定義文を図１のプログラム自動合成手段109 に渡す。
【００９９】
図２９は第２の実施の形態で説明した図１２のカーソル定義文生成手段の処理流れ図と対応し、特定の事例としてより詳細化したものである。図２９において、2900は図１２の1201に対応し、2901から2914までが図１２の1202から1204に対応する。図２９は特定の事例に関し、処理の最適化が施されているため、図１３に示した図１２の1202ステップのセレクト項目情報作成処理を実施すると同時に1203と1204を実施しているが、図２９の2906が図１２の1203に対応し、図２９の2909が図１２の1204に対応する。図２９の2915が図１２の1205に、図２９の2916から2918が図１２の1206に、図２９の2919が図１２の1207に対応する。
【０１００】
図３１に、図２９の方式で、図３０のカーソル定義文スケルトンを図２６の<<カーソル定義情報>>で完成したカーソル定義文を示す。図３１と図３０を比較すると、図３０の<<セレクト項目列挿入位置>>、<<入力表列挿入位置>>、<<セレクト条件挿入位置>>に、それぞれ以下の文字列が挿入され、カーソル定義が完成していることがわかる。
<<セレクト項目列挿入位置>> :
URIAGESU.CODE URIAGESU_CODE,
URIAGESU.URIAGE URIAGESU_URIAGE,
SHOUHIN.NAME SHOUHIN_NAME,
SHOUHIN.PRICE SHOUHIN_PRICE
<<入力表列挿入位置>> :
URIAGESU, SHOUHIN
<<セレクト条件挿入位置>> :
URIAGESU.URIAGE > 10 and
URIAGESU.CODE = SHOUHIN.CODE
次に図１の作業変数定義文生成手段106 の動作について、図３２と図３３を用いて説明する。図３３は生成しようとしている作業変数定義文のうち、仕様の如何に関わらず、固定的な骨組みを表すスケルトンである。3301: は"--"で始まっているため、コメント文である。3302: から3305: は、作業変数の型定義文のスケルトンである。3302に作業変数型名を3304: に出力項目定義情報を挿入することで完成した作業変数の型定義文になる。3306: は、出力用の作業変数の定義文の挿入位置である。本スケルトンの、
3302: <<作業変数型名挿入位置>>と、
3304: <<出力項目定義挿入位置>>と、
3306: <<変数定義文挿入位置>>とに図１の出力項目処理情報取得手段104 から受けとった<<出力項目処理情報>>を基に作成したプログラム断片を挿入し、作業変数定義文を完成させてプログラム自動合成手段109 に渡すのが、作業変数定義文生成手段106 である。
【０１０１】
図３３は実施の形態で説明した図８の作業変数定義スケルトンに対応し、特定の事例としてより詳細化したものである。図３３の3302から3305までが図８の型定義文挿入位置802 に対応する。図３３では、図８の型定義文挿入位置802 のうち、ＰＬ／ＳＱＬ言語特有の、仕様によらない部分を固定的に持っているためにより詳細な<<作業変数型名挿入位置>>と<<出力項目定義挿入位置>>を持って構成されている。図３３の3306 << 変数定義文挿入位置>>は、図８の変数定義文挿入位置803 と対応する。
【０１０２】
図３２を用いて本実施例における、図１の作業変数定義文生成手段106 の詳細な動作を説明する。3200: では、図２８の<<出力項目処理情報>>を図１の出力項目処理情報取得手段104 から受け取る。3201: と3202: は、繰り返し処理で用いる変数<<作業変数定義文列>>を空に、<<出力表番号>>を１にし、初期化している。3203: は、図１の出力項目処理情報取得手段104 から得られた、<<出力項目処理情報>>内の出力表の個数回だけ、3204: から3215: を繰り返すことを示している。なお、3204: から3215: において、着目している出力表は<<出力表>>で表される。
【０１０３】
3204: では、変数<<作業変数型名>>に"<< 出力表>>_<< 出力表番号>>_Type"の文字列がセットされる。ここで、<<出力表>>、<<出力表番号>>はそれぞれ、変数<<出力表>>、<<出力表番号>>の値に置き換えられる。3205: では、繰り返し処理で用いる変数<<出力項目定義>>を空にし、初期化している。
【０１０４】
3206: では、<<出力項目処理情報>>内の各<<出力表>>に対する項目の個数回数だけ、3207: から3208: を繰り返すことを示している。なお、3207: から3208: において、着目している項目は<<項目>>で表される。3207: では、仕様内の<<出力表>>の<<項目>>に対応する型を<<型>>にセットし、3208: では、",<<項目>> <<型>>" の文字列を作成し、変数<<出力項目定義>>に追加する。この時、<<項目>>、<<型>>は、それぞれ、変数<<項目>>、<<型>>の値に置き換えられる。3209: と3210: では、変数<<変数定義>>に"<< 出力表>>_<< 出力表番号>> << 作業変数型名>>;"をセットする。<<作業変数型名>>は、3204で、"<< 出力表>>_<< 出力表番号>>Type;"にセットされているため、結局、変数<<変数定義>>には"<< 出力表>>_<< 出力表番号>> << 出力表>>_<< 出力表番号>>Type;"がセットされる。
【０１０５】
3211: から3213: では、作業変数スケルトンの、それぞれ、<<作業変数型名挿入位置>>に<<作業変数型名>>を、<<出力項目定義挿入位置>>に<<出力項目定義>>を、<<変数定義文挿入位置>>に<<変数定義>>を挿入し、作業変数定義文を完成している。
【０１０６】
3214: では、完成した作業変数定義文を<<作業変数定義文列>>に追加し、3215:では、出力表番号に１を加算している。3214: と3215: は出力表が複数あった場合の、次の繰り返しのための準備である。全ての出力表に関する作業変数定義文が<<作業変数定義文列>>に追加された後、図１の作業変数定義文生成手段106 は、<<作業変数定義文列>>をプログラム自動合成手段109 に渡す。
【０１０７】
図３４に、図３２の方式で、図３３の作業変数スケルトンを図２８の<<出力項目処理情報>>で完成した作業変数定義文を示す。図３４と図３３を比較すると、図３３の<<作業変数型名挿入位置>>、<<出力項目定義挿入位置>>、<<変数定義文挿入位置>>に、それぞれ以下の文字列が挿入され、作業変数定義が完成していることがわかる。
【０１０８】
<<作業変数型名挿入位置>> :
URIAGEDAKA_1_Type
<<出力項目定義挿入位置>> :
, CODE char(4)
, NAME char(13)
, TOTAL number(14)
<<変定義挿入位置>> :URIAGEDAKA_1 URIAGEDAKA_1_Type
なお、図２８の例では、出力表が一つしか無いため、出力用作業変数定義文は一つしか生成されないが、出力表が複数あれば、出力表の数だけ、型定義文と変数定義文が生成される。
【０１０９】
図３２は、実施の形態で説明した図４の作業変数定義文生成手段の処理流れ図と対応し、特定の事例としてより詳細化したものである。図３２において、3200は図４の401 に対応し、3203から3215までが図４の402 の繰り返しに対応する。図３２の3204は、図４の403 と404 の両方に対応する前準備である。図３２の3205から3208までは、図４の403 に対応し、型定義文を生成している部分である。図３２の3209から3210までが図４の404 に対応し、変数定義文を作成している部分である。図３２の3211から3213までは図４の405 に対応し、型定義文の部分である<<作業変数型名>>と<<出力項目定義>>と、変数定義文を作成している。図３２の3216が図４の406 に対応している。
【０１１０】
次に図１の出力処理文生成手段107 の動作について図３５と図３６を用いて説明する。図３６は生成しようとしている出力文のうち、仕様の如何に関わらず、固定的な骨組みを表すスケルトンである。3601: と3603: と3611: は "--" で始まっているため、コメント文である。3602: には、出力表の各項目の値を計算する文の列が挿入されることを示している。3604: では、変数 SQLRESULTに０が代入されている。変数SQLRESULT は、処理が正常に行なわれている間０の値を持つため、ここで０にセットしているのは変数の初期化に当たる。3605: から 3610:では、3602: に挿入された文によって計算された出力表の各項目の値を、データベース表に書き込む処理が、insert文によって行なわれている。3606: の<<出力表名挿入位置>>に指定された表の、3607: の<<出力項目名挿入位置>>に指定された項目の値を、3609: の<<作業変数名挿入位置>>に指定された変数の値とし、データベースに書き込む。3612: から3615: では、データベースへの書き込み処理でエラーが発生した場合に、データベースから渡されたエラーコードであるSQLCODE の値を変数SQLRESULT に代入している、固定的な処理である。
【０１１１】
本スケルトンの、
3602: <<項目計算文挿入位置>>と、
3606: <<出力表名挿入位置>>と、3607: <<出力項目名挿入位置>>と、
3609: <<作業変数名挿入位置>>とに出力項目処理情報取得手段104 から受けとった<<出力項目処理情報>>を基に作成したプログラム断片を挿入し、出力処理文を完成させて<<出力処理文>>とし、プログラム自動合成手段109 に渡すのが、出力処理文生成手段107 である。
【０１１２】
図３６は実施の形態で説明した図９の出力処理文スケルトンに対応し、特定の事例としてより詳細化したものである。図３６の3602<<項目計算文挿入位置>>が図９の項目計算文挿入位置902 に対応する。図３６の3606から3610までが図９の出力文挿入位置903 に対応する。図３６では、図９の出力文挿入位置903 のうち、ＰＬ／ＳＱＬ言語特有の、仕様によらない部分を固定的に持っているためにより詳細な<<出力表名挿入位置>>と<<出力項目名挿入位置>>と<<作業変数名挿入位置>>を持って構成されている。
【０１１３】
次に出力処理文生成手段107 の詳細な動作について図３５を用いて説明する。3500: では、図１の出力項目処理情報取得手段104 から出力項目処理情報を入力する。この事例では、出力項目処理情報は図２８の形式となる。3501: と3502:は、繰り返し処理で用いる変数<<出力処理文列>>を空に、<<出力表番号>>を１にし、初期化している。3503: は、図１の出力項目処理情報取得手段104 から得られた出力項目処理情報内の、出力表の個数回だけ、3504: から3521: を繰り返すことを示している。なお、3504: から3521: において、着目している出力表は<<出力表>>で表される。
【０１１４】
3504: から3506: では、繰り返し処理で用いる変数<<計算文列>>、<<項目名列>>、<<変数名列>>をそれぞれ空にし、初期化している。3507: は、図１の出力項目処理情報取得手段104 から得られた出力項目処理情報内、<<出力表>>の項目の個数回だけ、3508: から3513: を繰り返すことを示している。なお、3508: から3513: において、着目している項目は<<項目>>で表される。3508: と3509: では、出力項目処理情報内の<<出力表>>の<<項目>>に対応する計算処理欄の値の中に出現する、"." を"_" に置換し、表名の前に"W_0."を追加して、変数<<計算式>>にセットする。3510: と3511: では、文字列"<< 出力表>>_<< 出力表番号>>.<< 項目>> := <<計算式>>;"を作成し、変数<<計算文列>>の最後に追加する。上記文字列内で、<<出力表>>、<<出力表番号>>、<<項目>>、<<計算式>>は、それぞれ変数<<出力表>>、<<出力表番号>>、<<項目>>、<<計算式>>の値に置き換えられる。3512: では、文字列"<<項目>>,"を、変数<<項目名列>>の最後に追加する。3513: では、文字列"<< 出力表>>_<< 出力表番号>>.<< 項目>>,"を、変数<<変数名列>>の最後に追加する。上記文字列内で、<<出力表>>、<<出力表番号>>、<<項目>>はそれぞれ変数の値で置き換えられる。
【０１１５】
3514: と3515: は、それぞれ<<項目名列>>と<<変数名列>>の最後の"," を削除する。これは、コンマはそれぞれの要素を区切るために必要なもので、最後には必要無いためである。3516: から3519: では、出力処理文スケルトンのそれぞれ、<<出力項目計算文挿入位置>>、<<出力表名挿入位置>>、<<出力項目名挿入位置>>、<<作業変数名挿入位置>>に変数、<<計算文列>>、<<出力表>>、<<項目名列>>、<<変数名列>>の値を挿入し、出力処理文を完成させる。3520: では、完成した出力処理文を<<出力処理文列>>の最後に追加し、3521: では、出力表番号に１を加算している。3520: と3521: は出力表が複数あった場合の、次の繰り返しのための準備である。全ての出力表に関する出力処理文が<<出力処理文列>>に追加された後、図１の作業変数定義文生成手段107 は、<<出力処理文列>>をプログラム自動合成手段109 に渡す。
【０１１６】
図３７に、図３５の方式で、図３６の出力処理文スケルトンを図２８の<<出力項目処理情報>>で完成した出力処理文を示す。図３７と図３６を比較すると、図３６の<<項目計算文列挿入位置>>、<<出力表名挿入位置>>、<<出力項目名挿入位置>>、<<作業変数名挿入位置>>に、それぞれ以下の文字列が挿入され、出力処理が完成していることがわかる。
【０１１７】
<<項目計算文挿入位置>> :
URIAGEDAKA_1.CODE := W_0.URIAGESU_CODE;
URIAGEDAKA_1.NAME := W_0.SHOUHIN_NAME;
URIAGEDAKA_1.TOTAL := W_0.URIAGESU_URIAGE * W_0.SHOUHIN_PRICE;
<<出力表名挿入位置>> :
URIAGEDAKA<<出力項目名挿入位置>> :
CODE,
NAME,
TOTAL
<<作業変数名挿入位置>> :URIAGEDAKA_1.CODE,
URIAGEDAKA_1.NAME,
URIAGEDAKA_1.TOTAL
【０１１８】
図３５は、実施の形態で説明した図５の出力処理文生成手段の処理流れ図と対応し、特定の事例としてより詳細化したものである。図３５において、3500は図５の501 に対応し、3503から3521までが図５の502 の繰り返しに対応する。図３５では、特定の事例における処理の最適化を行なっているため、図５における503 と504 は混在した形になっている。図３５の3504と、3508から3511までが図５の503 である、項目計算文の作成に対応する。図３５の3505から3506までと、3512と3513と、3514から1515までが図５の504 である、出力文の作成に対応する。図３５の3516から3519までは、図５の505 に対応している。図３５の3522は図５の506 に対応している。
【０１１９】
次に本実施例における、図１のプログラム自動合成手段109 とプログラムスケルトン108 について説明する。図３９に本実施例におけるプログラムスケルトンを示す。これは、本発明のデータ処理プログラム自動生成システムが出力するデータ処理プログラムのうち、仕様の如何に関わらず固定の部分のスケルトンである。図３９には、<<プログラム名挿入位置>>、<<カーソル定義文挿入位置>>、<<作業変数定義文列挿入位置>>、<<" 初期処理" 挿入位置>>、<<出力処理文列挿入位置>>、<<" 終了処理" 挿入位置>>の６箇所に具体的なプログラムになっていない部分がある。この部分は、仕様が変化するとプログラムも変化する部分である。図１のプログラム自動合成手段109 は、これら６箇所に、プログラムスケルトンカスタマイズ情報取得手段102 、カーソル定義文生成手段105 、作業変数定義文生成手段106 、出力処理文生成手段107 から渡されたそれぞれ、<<プログラムスケルトンカスタマイズ情報>>、<<カーソル定義文>>、<<作業変数定義文列>>、<<出力処理文列>>を挿入することにより、データ処理プログラムを完成させ、生成プログラム２を出力するものである。
【０１２０】
図３９は実施の形態で説明した図１０のプログラムスケルトンに対応し、特定の事例としてより詳細化したものである。図３９の3901:<< プログラム名挿入位置>>、3909:<< カーソル定義文挿入位置>>、3910:<< 作業変数定義文列挿入位置>>、3914:<<"初期処理" 挿入位置>>、3927:<< 出力処理文挿入位置>>、3930:<<"終了処理" 挿入位置>>が図１０の、それぞれ、プログラム名挿入位置1002、カーソル定義文挿入位置1003、作業変数定義文列挿入位置1004、" 初期処理" 挿入位置1005、出力処理文挿入位置1006、" 終了処理" 挿入位置1007に対応している。
【０１２１】
図３８に本実施例に置ける図１のプログラム自動合成手段109 の処理手順を示す。まず、3800: で図１のプログラムスケルトン108 を入力する。3801で、<<プログラム名>>と<<プログラムカスタマイズ情報>>と<<カーソル定義文>>と<<作業変数定義文列>>と<<出力処理文列>>を受け取る。3802: から3804: で、図１のプログラムスケルトンカスタマイズ情報取得手段102:から渡された<<プログラムスケルトンカスタマイズ情報>>から、プログラム名、初期処理、終了処理に対応する文字列を、図３９のそれぞれ、3901: <<プログラム名挿入位置>>、3914: <<初期処理挿入位置>>、3930: <<終了処理挿入位置>>に挿入する。3805: では、図１のカーソル定義文生成手段105 から渡された<<カーソル定義文>>を図３９の3909: <<カーソル定義文挿入位置>>に挿入する。3806: では、図１の作業変数定義文生成手段106 から渡された<<作業変数定義文列>>を図３９の3910: <<作業変数定義文列挿入位置>>に挿入する。3807: では、図１の出力処理文生成手段106 から渡された<<出力処理文列>>を図３９の3927: <<出力処理文列挿入位置>>に挿入する。3808: では、以上により完成したデータ処理プログラムを図１における生成プログラム２として出力する。以上により、仕様からプログラムの自動生成が全て終了したことになる。
【０１２２】
図４０に、図１９に示した仕様から出力された生成プログラムの例を示す。図４０と図３９を比較すると、図３９の<<プログラム名挿入位置>>、<<カーソル定義文挿入位置>>、<<作業変数定義文挿入位置>>、<<初期処理文挿入位置>>、<<出力処理文挿入位置>>、<<終了処理文挿入位置>>にそれぞれ、以下の文が挿入され、プログラムが完成していることがわかる。
【０１２３】
<<プログラム名挿入位置>> :
URIAGE_KEISAN()
<<カーソル定義文挿入位置>> :
--カーソル定義
cursor CSR_0 is
select
URIAGESU.CODE URIAGESU_CODE,
URIAGESU.URIAGE URIAGESU_URIAGE,
SHOUHIN.NAME SHOUHIN_NAME,
SHOUHIN.PRICE SHOUHIN_PRICE
from URIAGESU, SHOUHIN
where URIAGESU.URIAGE>10
and URIAGESU.CODE=SHOUHIN.CODE
;
--カーソル用変数定義
W_0 CSR_0%rowtype;
<<作業変数定義文挿入位置>> :
--出力用作業変数定義
type URIAGEDAKA_1_Type is record(
W_ROWID rowid
,CODE char(4)
,NAME char(22)
,TOTAL number(14)
);
URIAGEDAKA_1 URIAGEDAKA_1_Type;
<<初期処理文挿入位置>> :
Init_module;
<<出力処理文挿入位置>> :
--各出力項目の計算
URIAGEDAKA_1.CODE := W_0.URIAGESU_CODE;
URIAGEDAKA_1.NAME := W_0.SHOUHIN_NAME;
URIAGEDAKA_1.TOTAL:=W_0.URIAGESU_URIAGE * W_0.SHOUHIN_PRICE
--出力表への出力処理
SQLRESULT := 0;
begin
insert into URIAGEDAKA(
CODE
,NAME
,TOTAL_SALE
) values(
URIAGEDAKA_1.CODE
,URIAGEDAKA_1.NAME
,URIAGEDAKA_1.TOTAL
);
/*例外処理 */
--例外処理
exception
when others then
SQLRESULT := SQLCODE;
end;
<<終了処理文挿入位置>> :
End_module;
【０１２４】
図３８は、実施の形態で説明した図６のプログラム自動合成手段の処理流れ図と対応するものである。図３８において、3800と3801は、それぞれ、図６の601 と602 に対応する。図３８の3802から3804までが図６の606 に対応し、図３８の3805、3806、3807が、図６のそれぞれ、603 、604 、605 に対応する。図３８の3808は、図６の607 に対応する。
【産業上の利用可能性】
【０１２５】
本発明は、プログラムの開発に当たり、業務要求の仕様から様々なデータ処理プログラムを自動生成することに応用できる
【図面の簡単な説明】
【０１２６】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】本発明の第１の実施の形態における仕様の構成と、仕様中の出力表処理定義における処理種別毎の必要情報を示す図である。
【図３】本発明の第１の実施の形態におけるカーソル定義文生成手段の処理を示す流れ図である。
【図４】本発明の第１の実施の形態における作業変数定義文生成手段の処理を示す流れ図である。
【図５】本発明の第１の実施の形態における出力処理文生成手段の処理を示す流れ図である。
【図６】本発明の第１の実施の形態におけるプログラム自動合成手段の処理を示す流れ図である。
【図７】本発明の第１の実施の形態におけるカーソル定義文生成手段で使用するカーソル定義文スケルトンの構成を示す図である。
【図８】本発明の第１の実施の形態における作業変数定義文生成手段で使用する作業変数定義文スケルトンの構成を示す図である。
【図９】本発明の第１の実施の形態における出力処理文生成手段で使用する出力処理文スケルトンの構成と、そのスケルトンのうちの挿入文、更新文、削除文の構成を示す図である。
【図１０】本発明の第１の実施の形態におけるプログラムスケルトンの構成を示す図である。
【図１１】本発明の第２の実施の形態における仕様の構成を示す図である。
【図１２】本発明の第２の実施の形態におけるカーソル定義文生成手段の処理を示す流れ図である。
【図１３】本発明の第２の実施の形態におけるセレクト項目定義情報を作成する処理を示す流れ図である。
【図１４】本発明の第３の実施の形態の構成を示すブロック図である。
【図１５】本発明の第３の実施の形態における仕様の構成を示す図である。
【図１６】本発明の第４の実施の形態における仕様入力手段の処理を示す処理流れ図である。
【図１７】本発明の第１の実施の形態の処理例を示す処理流れ図である。
【図１８】本発明の第６の実施の形態の構成を示すブロック図である。
【図１９】本発明の実施例の仕様の構成及び例を示す図である。
【図２０】本発明の実施例の仕様の例の意味を説明するための図である。
【図２１】本発明の実施例における仕様入力手段の処理を示す流れ図である。
【図２２】本発明の実施例における、仕様を入力した後の内部情報の構成と例を示す図である。
【図２３】本発明の実施例における、プログラムスケルトンカスタマイズ情報取得手段がプログラム自動合成手段に渡すプログラムスケルトンカスタマイズ情報の構成を示す図である。
【図２４】本発明の実施例における、プログラムスケルトンカスタマイズ情報取得手段がプログラム自動合成手段に渡すプログラムスケルトンカスタマイズ情報の例を示す図である。
【図２５】本発明の実施例における、カーソル定義情報取得手段がカーソル定義文生成手段に渡すカーソル定義情報の構成を示す図である。
【図２６】本発明の実施例における、カーソル定義情報取得手段がカーソル定義文生成手段に渡すカーソル定義情報の例を示す図である。
【図２７】本発明の実施例における、出力項目処理情報取得手段が作業変数定義文生成手段と出力処理文生成手段に渡す出力項目情報の構成を示す図である。
【図２８】本発明の実施例における、出力項目処理情報取得手段が作業変数定義文生成手段と出力処理文生成手段に渡す出力項目情報の例を示す図である。
【図２９】本発明の実施例におけるカーソル定義文生成手段の処理内容を示す図である。
【図３０】本発明の実施例におけるカーソル定義文生成手段で使用するカーソル定義文スケルトンを示す図である。
【図３１】本発明の実施例におけるカーソル定義文生成手段によって生成されたカーソル定義文の例を示す図である。
【図３２】本発明の実施例における作業変数定義文生成手段の処理内容を示す図である。
【図３３】本発明の実施例における作業変数定義文生成手段で使用する作業変数定義文スケルトンを示す図である。
【図３４】本発明の実施例における作業変数定義文生成手段によって生成された作業変数定義文の例を示す図である。
【図３５】本発明の実施例における出力処理文生成手段の処理内容を示す図である。
【図３６】本発明の実施例における出力処理文生成手段で使用する出力処理文スケルトンを示す図である。
【図３７】本発明の実施例における出力処理文生成手段によって生成された出力処理文の例を示す図である。
【図３８】本発明の実施例におけるプログラム自動合成手段の処理内容を示す図である。
【図３９】本発明の実施例におけるプログラムスケルトンを示す図である。
【図４０】本発明の実施例におけるプログラム自動合成手段によって生成された出力プログラムの例を示す図である。
【図４１】第１の従来技術の構成を示す図である。
【図４２】第２の従来技術の構成を示す図である。
【符号の説明】
【０１２７】
２…生成プログラム
10…データ処理プログラム自動生成システム
101…仕様入力手段
102…プログラムスケルトンカスタマイズ情報取得手段
103…カーソル定義情報取得手段
104…出力項目処理情報取得手段
105…カーソル定義文生成手段
106…作業変数定義文生成手段
107…出力処理文生成手段
108…プログラムスケルトン
109…プログラム自動合成手段
【図１】
2004213698.tif 000003
【図２】
2004213698.tif 000004
【図３】
2004213698.tif 000005
【図４】
2004213698.tif 000006
【図５】
2004213698.tif 000007
【図６】
2004213698.tif 000008
【図７】
2004213698.tif 000009
【図８】
2004213698.tif 000010
【図９】
2004213698.tif 000011
【図１０】
2004213698.tif 000012
【図１１】
2004213698.tif 000013
【図１２】
2004213698.tif 000014
【図１３】
2004213698.tif 000015
【図１４】
2004213698.tif 000016
【図１５】
2004213698.tif 000017
【図１６】
2004213698.tif 000018
【図１７】
2004213698.tif 000019
【図１８】
2004213698.tif 000020
【図１９】
2004213698.tif 000021
【図２０】
2004213698.tif 000022
【図２１】
2004213698.tif 000023
【図２２】
2004213698.tif 000024
【図２３】
2004213698.tif 000025
【図２４】
2004213698.tif 000026
【図２５】
2004213698.tif 000027
【図２６】
2004213698.tif 000028
【図２７】
2004213698.tif 000029
【図２８】
2004213698.tif 000030
【図２９】
2004213698.tif 000031
【図３０】
2004213698.tif 000032
【図３１】
2004213698.tif 000033
【図３２】
2004213698.tif 000034
【図３３】
2004213698.tif 000035
【図３４】
2004213698.tif 000036
【図３５】
2004213698.tif 000037
【図３６】
2004213698.tif 000038
【図３７】
2004213698.tif 000039
【図３８】
2004213698.tif 000040
【図３９】
2004213698.tif 000041
【図４０】
2004213698.tif 000042
【図４１】
2004213698.tif 000043
【図４２】
2004213698.tif 000044