• ベストアンサー

 cobolのカーソルについて

k_o_r_o_c_h_a_nの回答

  • ベストアンサー
回答No.1

明示的なカーソルのオープン/クローズを行えば、何度でも読み直せると思いますが、 予め件数が判っていて、読み直しても不変のレコードなら、変数に格納して再利用するほうが 合理的かと思います。 (レコード内容の変化を期待しての再読み出しなら、仕方ないですけどね)

solat0106
質問者

お礼

 的確なアドバイスありがとうございます。仕事で忙しくなかなかお礼を記す時間が持てませんでした。ご指摘通りの方法で解決可能でした。大変ありがとうございました。

関連するQ&A

  • カーソルについて

    カーソルってオープン時に該当データの全レコードセットを取得するんでしょうか?。 PL/SQLでVIEWのカーソルをオープンし、ループ処理を行っているんですが、処理速度からして1フェッチごとに毎回SELECT文を発行しているように見受けられます・・・。 ソースはこんな感じです↓。 declare cursor cur_tb_1 is select * from ビュー; begin for rec_tb_1 in cur_tb_1 loop ...処理いろいろ end loop; end; また、このようなケースの場合、VIEWのSELECT結果を一時テーブルにINSERTし、そのテーブルをSELECTするカーソルを使用するほうが 作法的によいのでしょうか?

  • COBOL言語で開発できますか?

    SQL Server2000のデータ処理をCOBOL言語で開発できますか? 社内システムの開発コスト低減のためシルバー人材を使い安くあげたいと考えています。田舎のシルバー市場ではOPEN系言語を使える人が十分にはみつかりません、それでCOBOLを使って開発できないかと考えました。 すべての業務をCOBOLで開発するのではなくデータを抽出し加工してテキストデータをつくる部分をCOBOLで行えないかと考えています。 (欲を言えばレコードの追加や更新もできればこしたことはないのですが) システムの寿命は約10年と見積もっています

  • MySQLではカーソルを使うことができない?

    MySQLでデータベースの勉強をしています。 先頭からレコードを1件ずつシーケンシャル処理を行う時、カーソル定義をすればFETCHが使えそうです。 でもMySQLにはカーソルがないようです(SQLポケットリファレンス 技術評論社 平成17年版) ではどのような方法があるのでしょうか。 或いは最新版のMySQLではカーソル変数定義できますか?

  • COBOLの動的SQLについて

    COBOLにおいて、動的にSQLを組みたいのですが、 取得する方法も含めてご教授願いませんでしょうか? 例) 条件により コード=1の場合、 SELECT A.ID,B.NAME FROM ID A,NAME B コード=2の場合、 SELECT A.ID,B.NAME,C.ADDRESS FROM ID A,NAME B,ADDRESS C のように条件により取得する項目も数もテーブルも違います。 この場合でのSQLの組み方とデータを取得する(FETCHの方法)がわかりません。 また、取得する件数も1件ではありません。 よろしくお願い致します。

  • カーソルで取得した項目のサイズについて質問です。。

    カーソルで取得した項目のサイズについて質問です。。 SELECTした項目のサイズが下記の場合、 レコード格納変数.Cの最大サイズは(14)で、それ以上のバイト数値を代入すると エラーになると思ったのですが、エラーになりませんでした。(最大28バイトになった) レコード格納変数の取得した項目サイズは何で決まってくるのでしょうか? この項目を別テーブルのVARCHAR(20)の項目へ設定しようと思っているのですが、 理由がわからないので、このままでいいのか、サイズを考慮した設計にするべきか困っています。 <oracle 9i> TABLE1{A VARCHAR2(4), B VARCHAR2(10)} DECLARE  CURSOR カーソル変数 IS SELECT A||B AS C FROM TABLE1;  レコード格納変数 カーソル変数%ROWTYPE; BEGIN  OPEN カーソル変数  LOOP   FETCH カーソル変数 INTO レコード格納変数;   EXIT WHEN カーソル変数%NOTFOUND;    :    レコード格納変数.C := VARCAHR2(15) --代入可能?    :    INSERT 項目1 VARCHAR(20) TABLE2 レコード格納変数.C;    :  END LOOP  CLOSE カーソル変数 END;

  • カーソル宣言をIFで分けられませんか?

    よろしくお願いします。 Pro*Cで作成しているのですが、カーソルの宣言時に指定するSQLをIF文で分けようとすると、 コンパイル時に「PCC-W-02332, SQLの識別子を再定義しようとしました。」が表示されます。 IFの結果がどうであれ、カーソルが取得するレイアウトが同一かつ、OPEN後の処理も同じように処理するため、できれば同一のカーソル名で行いたいです。 以下は今の状態を簡略化したプログラミングですが、 どのように対処するのが良いのでしょう。 Oracle10.2です。 よろしくお願いします。 ------------------------------------------------------- int flg; <中略> if ( flg == 0 ) {  EXEC SQL DECLARE curname CURSOR FOR   SELECT tbl.col1, 'flgが0です' AS col2 FROM tbl  ; } else {  EXEC SQL DECLARE curname CURSOR FOR   SELECT tbl.col1, 'flgが0以外です' AS col2 FROM tbl  ; } EXEC SQL OPEN curname; EXEC SQL WHENEVER NOT FOUND DO BREAK; while(1) {  EXEC SQL FETCH rackBCCur INTO :retVals  <略> } -------------------------------------------------------

  • 動的なSQLからカーソルを返す。

    下記のようなカーソルを返すパッケージがあったとします。 CREATE OR REPLACE PACKAGE TEST AS CURSOR C1 IS SELECT * FROM テーブル; TYPE TC1 IS REF CURSOR RETURN C1%ROWTYPE; PROCEDURE P_TEST(in条件 IN CHAR, CU OUT TC1); END; CREATE OR REPLACE PACKAGE BODY TEST IS PROCEDURE P_TEST(in条件 IN CHAR, CU OUT TC1) AS sqlStr VARCHAR2(1000); cur NUMBER; r NUMBER; BEGIN cur := DBMS_SQL.OPEN_CURSOR; sqlStr := 'OPEN CU FOR SELECT * FROM テーブル WHERE 条件 = ' || in条件; DBMS_SQL.PARSE(cur, sqlStr, DBMS_SQL.NATIVE); DBMS_SQL.DEFINE_COLUMN(cur, 1, CU); r := DBMS_SQL.EXECUTE(cur); DBMS_SQL.CLOSE_CURSOR(cur); END; SELECTした結果のカーソル(CU)をクライアントで取得したいのですけど 技術的に可能でしょうか? ストアドのコンパイル時に→DBMS_SQL.DEFINE_COLUMN(cur, 1, CU);が エラーとなります。 DBMS_SQL.DEFINE_COLUMNではカーソルタイプは取得できないとわっかたの ですがカーソルを取得する為のDBMS_SQL.DEFINE_COLUMNにかわる DBMS_SQL.?????はないでしょうか? いろいろ調べたのですが手に負えず。 どなたか教えてください。

  • COUNT(*)の使い方

    COUNT(*)の使い方が分からないので質問します。 直接のSQLでCOUNT(*)を使ってレコード数を表示させることはできましたが PHPでのSQLではCOUNT(*)をPHPのソースの変数に代入する方法が分かりません。 $sql = 'SELECT ip, COUNT(*) FROM webdb'; $ret = mysql_query($sql); $rowval = mysql_fetch_row($ret); この場合、$rowval[1] がテーブルwebdbのレコード数だと 思いましたが、間違っているところはございませんか?

    • ベストアンサー
    • MySQL
  • フォームのレコードソース(Access2000)

    質問させていただきます。 フォームの「レコードソース」でテーブルとクエリーのほかに、「SELECT テーブル名、フィールド名・・・」というのがあります。これもクエリーなのでしょうか? ちなみに、レコードソースの右にある「---」をクリックすると「SQLステートメント:クエリビルダ」というものが開きます(クエリー画面と同じ?)。 また、フォームのレコードソースはテーブル、クエリー、SOLステートメントのどれにすれば良いのでしょうか?

  • select count(*) の性能

    業務アプリケーションで次のSQL文を実行すると非常に時間がかかっています。 "select count(*) from テーブル名 where カラムA='値B'" このテーブルは200万件以上のレコードが存在していて、カラムAには索引が作成されています。DBのOPTIMIZERの処理を見ると(1)索引検索をした後で(2)対象レコードのROWIDを取得して(3)その後FETCH処理をしているのですが、(3)のFETCHの処理が非常に時間がかかっています。どうしたらこの検索を早くできるかヒントがあれば教えて下さい。私のしろうと考えでいくと、DBがどうして(3)のFETCHの処理をしているのかもわかりません。よろしくお願いします。