■SI Object Browser 掲示板


ユーザの皆様、開発者、サポート担当者の交流のための掲示板です!

ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。
なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。

discussion
※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】
※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。
※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。
※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。

よくある質問(FAQ)

検索オプション 矢印

~
リセット
新規投稿
こんにちは。
お答えします。

>#質問の後半に
>#>(LOW-VALUEはバイトに文字がが存在しない意味となり、空白はカットされるため)
>#という事なので、両方ともカットされるって事でいいのかな。
まったくその通りです。表示上では同じです。

>文字列って事は、VARCHAR2とかCHARって事ですよね。その中に文字列じゃないもの
>を設定しているときにどのように表示したら良いだろう考えてしまいました。
>そのLOW-VALUEをSQL*Plusなどで検索したり表示したりするとどのように見えるの
>でしょうか。
>あと、SQL*PlusでLOW-VALUEを扱う方法ってあるのでしょうか?
SQLでは、HEX表示する関数が存在します。それを使えば可能です。
関数名は忘れました。

>まったく個人的な意見ですが、COBOLのLOW-VALUEってある種のNULLですよね。
>NULLがあるのだから、それ以外に同じようなLOW-VALUEを使う意味ってのがない気も
>します。
多少扱いが違います。
NULLというのはDB上の扱いになります。
しかしLOW-VALUEはCOBOL上のもので、文字を格納するためのバイトは確保するが中身が存在しない状態です。
そのため、親記事の例ではHEX1とHEX2という表現で表しました。

>COBOLで書かれたホストのシステムをOracleを使ったものに作り直した事も何件かあ
>りますが、これといって特にNULL以外にLOW-VALUEが欲しいと思う局面に出会った事
>もなかったので。
データとしてLOW-VALUEが欲しいと言う人はまず少ないでしょう。
これは、開発途中のテストデータから発生することが多く、デバッグの効率を向上させたいが為に提案しました。

>実現するのならば、HEX表示機能にしても空白削除抑止機能にしても、設定(やボタ
>ン)によって切り替えられるようにして、現在の使い勝手も残して欲しいです。
切り替え可能の方が良さそうですね。
空白をカットして表示した場合に区別できれば問題はありません。
>ORACLEで開発をしています。
>PRO*COBOLを主流に開発をしている者です。
大変ですね。

ObjectBrowserの開発者でも関係者でもないので、単なる技術的好奇心からですが、
ちょっと質問させていただきます。
>COBOLにはLOW-VALUEが存在します。これはDBに存在するNULLとは異なるものです。
>開発中のプログラムではDBのレコードにLOW-VALUEが発生する場合はしばしばあります。
>OBでデータを表示した場合、文字の後の空白はすべてカットされた状態で表示されます。
>例えば、10byte中5byteの文字列が入っている場合に残り5byteは空白かLOW-VALUEかの
>判断が出来ません。
それって、LOW-VALUEなのにカットされるということでしょうか?
「LOW-VALUEはNULLと異なるもの」、「文字の後の空白はすべてカットされた状態」
という記載からすると、LOW-VALUEなるものを空白と同等に扱ってしまうって点に
まず問題があるのかなぁといったところですよね。
#質問の後半に
#>(LOW-VALUEはバイトに文字がが存在しない意味となり、空白はカットされるため)
#という事なので、両方ともカットされるって事でいいのかな。

文字列って事は、VARCHAR2とかCHARって事ですよね。その中に文字列じゃないもの
を設定しているときにどのように表示したら良いだろう考えてしまいました。
そのLOW-VALUEをSQL*Plusなどで検索したり表示したりするとどのように見えるの
でしょうか。
あと、SQL*PlusでLOW-VALUEを扱う方法ってあるのでしょうか?

まったく個人的な意見ですが、COBOLのLOW-VALUEってある種のNULLですよね。
NULLがあるのだから、それ以外に同じようなLOW-VALUEを使う意味ってのがない気も
します。
COBOLで書かれたホストのシステムをOracleを使ったものに作り直した事も何件かあ
りますが、これといって特にNULL以外にLOW-VALUEが欲しいと思う局面に出会った事
もなかったので。

>上記理由により、HEX表示機能か、あるいは空白削除機能の排除を希望します。
実現するのならば、HEX表示機能にしても空白削除抑止機能にしても、設定(やボタ
ン)によって切り替えられるようにして、現在の使い勝手も残して欲しいです。
だって、CHAR型の後ろ空白なんてGUIじゃ邪魔ですから。
>「一時表」でワード検索してみませう。
つまり、この掲示板で、過去に同様の質問があったって事ですね。
>updateによってNULLをsetすればNULL扱いにはなるのですが・・・
>CHAR型項目のフォーカス上で項目を変更(Deleteによる値削除)した場合
>にNULLにする方法は無いでしょうか?
http://www.sint.co.jp/bbs/index.aspの「OOBでNULLをセット」の件名
での質問で回答されていましたが、現状ではないという事だったと思います。
いつもお世話になっております。

ORACLEで開発をしています。
PRO*COBOLを主流に開発をしている者です。

単刀直入ですが、OBで表示するデータのHEX表示機能を希望します。
さらに上記機能の理由とともにOB操作上、発生した現象を報告します。

PRO*COBOLを使用してシステムを構築する途中に発生した出来事です。
COBOLにはLOW-VALUEが存在します。これはDBに存在するNULLとは異なるものです。
開発中のプログラムではDBのレコードにLOW-VALUEが発生する場合はしばしばあります。
OBでデータを表示した場合、文字の後の空白はすべてカットされた状態で表示されます。
例えば、10byte中5byteの文字列が入っている場合に残り5byteは空白かLOW-VALUEかの判断が出来ません。
さらに、LOW-VALUEが入っていた場合、対象レコードはOB上でデータの更新が全く出来ない状態になってしまいます。
よって更新処理と削除処理が出来ません。
SQLを実行すれば更新・削除が出来ます。(LOW-VALUEが入っていない項目を抽出条件とする)

余談ですがACCESSの場合は存在するデータの後ろの空白は取り除いていません。LOW-VALUEが入っていたらすぐに見て解りました。データの更新・削除も可能でした。

LOW-VALUEが絡む現象がもう1つあります。
例えば、LOW-VALUEが入っているデータがキーだとします。
(キー長10byte文字型)
"_"をLOW-VALUEとします。

文字列 ABCDEF____
HEX1 4444440000
HEX2 1234560000

このデータと、LOW-VALUEが存在しないデータをINSERTします。
"~"を半角スペースとします

文字列 ABCDEF~~~~
HEX1 4444442222
HEX2 1234560000

この2つのデータは異なるものなのでキーは重複しません。
しかし、OBでは表示が同じになります。
(LOW-VALUEはバイトに文字がが存在しない意味となり、空白はカットされるため)
この場合データは1行しか表示されず、レコードにカーソルを移動させたりすると表示されるデータの中身が様々な表示になります(表示レコードが可変する)。

上記理由により、HEX表示機能か、あるいは空白削除機能の排除を希望します。

以上、宜しく御願いします。
「一時表」でワード検索してみませう。
いろいろと説明不足で申し訳有りませんでした。

現象としてはきのこさんのご指摘の通りです。

こけももさんご指摘の
[オプション]>[SQL結果出力]>[データ編集時の自動COMMITを行わない]

については試してみました。
しかし、今までCOMMITボタンを押す習慣がなかったので
ついつい忘れてしまいそうで...

ただ、私の環境だけではない、ということが解ったので一安心です。
きちんと表示されるようになるのを待つことにします。
やんです。
ObjectBrowser(7.07.35)を使わせて頂いてます。

TABLEのソース表示について要望があります。

一時表(CREATE GLOBAL TEMPORARY TABLE ...)のソースを表示しても、
現状、通常の表と同じように表示(CREATE TABLE ...)しています。

CREATE GLOBAL TEMPORARY TABLE ...と表示されると、区別ができて
分かりやすいのですが、いかがでしょうか?

動的ビューから取得して表示しているのであれば、ObjectBrowser でな
く、Oracleへの要望になってしまうのかもしれませんね。

最後に、これからも期待しています。
頑張って下さい。
>そういえば
>OOB7はの動作環境は8.1.5までだった...

残念ながら古いバージョンの Oracle でも同様でした。

[オプション]>[SQL結果出力]>[データ編集時の自動COMMITを行わない]
のチェックを外せばそれらしい動作をしましたので、一度お試し下さい。

COMMIT / ROLLBACK を手動でやんないといけないのと、制約のチェック
が COMMIT 直前になっちゃうので、複数行入力した時に制約にひっかかる
と面倒ですが、なれればこっちのほうが使いやすいですよ。
>「管理」ー>「ロード」ー>「ファイル->DB」を実行すると
>COMMITポイントに達しましたと結果ログにでることがあります。
>これはなんでしょうか?

「処理の途中ですが COMMIT しときました」と Oracle がいってる
だけなので気にしなくてもいいと思います。
デフォルトでは 64 レコード取り込む毎に勝手に COMMIT されます。


>それと「ファイル->DB」を実行して失敗したときに、*.BADという
>ファイルが出力されていることがありますがこれはなんでしょうか?

不良ファイルです。取り込みに失敗したデータが格納されます。
(ただし WHEN 句ではじかれたデータは廃棄ファイルに格納)