
お世話になります。
pro*cobolで、テーブルの作業領域を定義し、
データの編集後、oracleのテーブルへ出力している
のですが、cobol側の定義はpic9タイプで
oracleの項目定義ではCHAR型になっております。
この状態で、cobol側のpic9タイプの項目に
"A00001"等文字を含む値を設定した所、
ABENDせずにoracleテーブルに"A00001"の
項目値を出力しています。
cobolだけに限れば、属性エラーなのですが、
この場合、oracleの項目定義が優先されるのでしょうか?
よろしくご教授の程、お願い申し上げます。
No.2ベストアンサー
- 回答日時:
オラクルは、ホスト変数が、CHAR型であれば、
CHAR型が認めるデータ値を登録します。
問題は、COBOL処理系が、ゾーン十進数の変数に
格納されたアルファベットを如何に送り出すかで
結果が変わります。
01 TBL-WORK1.
03 ID-NUM PIC 9(06).
01 TBL-WORK2.
03 ID-CHR PIC X(06).
MOVE "A00001" TO TBL-WORK1.
MOVE ID-NUM TO ID-CHR. /* ここ */
記憶で申し訳ないんですが、受け取りがXタイプや
集団項目の場合、送り出し側の9タイプの内容に
かかわらず、英数字転記するのが標準的取り扱いと
記憶しています。
詳しくはマニュアルの転記規則の説明をご覧頂くと
理解できるかと思います。

No.1
- 回答日時:
どのようにCOBOLでデータを設定したかわかりませんが多分大項目に MOVE したのではないでしょうか?
COBOLの場合大項目に対して MOVE 命令を実施した場合、下位の属性は無視されてしまいます。
01 TBL-WORK.
03 ID-NUM PIC 9(06).
03 ID-CHR PIC X(06).
MOVE "A00001A00001" TO TBL-WORK.
上記のような使用をすると ID-NUM の値は質問のようになります。
プログラムで UPDATE するときデータはアドレスが渡されるだけですから中身が数字なのか文字なのかはわかりません。
今回の場合、文字のまま ORACLE にデータが渡されていると想定できます。
oracleの項目定義が優先されるということはないと思います。
こういった定義の誤りは本来バグです。運用で障害が発生する場合もあるので早めにに修正された方がいいと思います。
この回答への補足
ご回答頂き、ありがとうございます。
本件は確かに集団項目なのですが、
上記の例で申しますと、レベル01の項目ではなく、
レベル03にてPIC9で定義した項目に対して
値のやり取りをしています。
言葉足らずで申し訳ございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- SEO Googleアナリティクスでの設定について 1 2023/07/12 09:07
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- その他(ブラウザ) python から COBOL を呼び出すことは可能でしょうか。 1 2023/04/21 21:03
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データ削除とSQL*Loaderでのイ...
-
オラクルのUPDATEで複数テーブル
-
truncate tableを使って複数の...
-
CASEでBETWEEN制約
-
既にテーブルが存在する場合の...
-
Oracleによるリンクテーブルで...
-
エラーを起こす方法
-
フラグをたてるってどういうこ...
-
【SQL】他テーブルに含まれる値...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
エクセルVBA 10分後にエクセル...
-
PostgreSQLのtimestamp型で時間...
-
csvデータ不要列の削除をbatフ...
-
シーケンスのリストを取得したい。
-
結合したテーブルをSUMしたい
-
mysql 複数テーブルの条件付け摘出
-
SQLDataSouceに再接続できない?
-
ファイルメーカー Pro7(W...
-
SQLで、Join句で結合したテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
truncate tableを使って複数の...
-
オラクルのUPDATEで複数テーブル
-
エラーを起こす方法
-
テーブル定義書(Oracle) 【IX】...
-
CASEでBETWEEN制約
-
既にテーブルが存在する場合の...
-
データ削除とSQL*Loaderでのイ...
-
任意のテーブルをdrop tableしたい
-
貸家のデータベース
-
AccessからOracle DB(View)を...
-
oracle ora-02298
-
Where句のNot条件をAnd条件にし...
-
テーブルDROPできないのです。。。
-
テーブルに変更があったらCSV出力
-
accessのデータをoracleへinser...
-
1テーブルに対して別々の条件...
-
select文の結果から新しいテー...
-
フィールド数が異なるテーブル...
-
[materialized]マテリアライズ...
-
複数レコードの複数フィールド...
おすすめ情報