カーソルを使って、最終行レコードの判断はどうすればよいのでしょうか。
処理はオーソドックスなスタイルでコーディングしているとします。
「ループ処理内で、FETCH NEXTした際に、最終行か判断したい」という質問です。
EOFで最終行だと判断するのは一般的ですが、ループ内で通常行と最終行の切り分けをしたいのです。特に何かの制約や事情があるわけではありませんので、実現できればそれでOKです。
要するに、最終行レコードが、通常行レコードの処理とかぶらなければ、用件は満たせるのですが、あまり懲りたくもないのもあって、ちょっと実装イメージが思い浮かばず、困ってます。
ご回答お願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
動的カーソルという言葉はどの意味でつかわれているのでしょうか?
SQL Serverで動的カーソルと言えば、カーソル処理中もすべての更新が反映するカーソルのことですが。。。
でも、この手の処理にカーソルを使う発想がOracleっぽい気がしますので(SQL Serverでは普通カーソルは使わないケースです)、おそらくは「動的SQLをバインドしたカーソル」の意味でつかわれているのではないかと推測しました。
そうすると、サンプル以下の通りです。
DECLARE @FLD int
DECLARE @CNT int
DECLARE @sql varchar(MAX)
SET @sql = 'DECLARE C CURSOR STATIC FOR SELECT FLD FROM TBL'
EXEC (@sql)
OPEN C
SET @CNT=@@CURSOR_ROWS
FETCH NEXT FROM C INTO @FLD
WHILE (@@FETCH_STATUS=0)
BEGIN
SET @CNT=@CNT-1
IF (@CNT=0) PRINT 'LAST ROW:'+CONVERT(varchar,@FLD)
ELSE PRINT 'REGULAR ROW:'+CONVERT(varchar,@FLD)
FETCH NEXT FROM C INTO @FLD
END
CLOSE C
DEALLOCATE C
読み違えていればごめんなさい。
この回答への補足
やりたいことの意図は合ってるのですが、うまくいきませんでした。
SET @CNT=@@CURSOR_ROWSの部分で、カーソルで拾ったレコード数が保持されていることを期待しましたが、マイナス値で、絶対値としてもレコード数とは違うようです。
当方のコーディングがヘマってるかもしれませんが…
他に追われて、なかなか調査しきれてませんが、SET @CNT=@@CURSOR_ROWSという箇所では、レコード数が取得できると思ってよいでしょうか。でないと、デクリメントしても意味ないですしね。動的にバインドしても成り立ちますよね。この部分が少し気になってます。
No.1
- 回答日時:
凝ったことは必要ないならば、単純に件数で判断しては?
DECLARE @FLD int
DECLARE @CNT int
DECLARE @C CURSOR
SET @C = CURSOR FAST_FORWARD FOR SELECT FLD FROM TBL
SET @CNT=@@ROWCOUNT
OPEN @C
FETCH NEXT FROM @C INTO @FLD
WHILE (@@FETCH_STATUS=0)
BEGIN
SET @CNT=@CNT-1
IF (@CNT=0) PRINT 'LAST ROW'
ELSE PRINT 'REGULAR ROW'
FETCH NEXT FROM @C INTO @FLD
END
この回答への補足
要件が足りてました。ごめんなさい。
(1) カーソルは動的カーソルで行いたい
(2) 回答の例で付け加えで言いますと、@FLDを表示したい。
というイメージで、ご回答していただけたらうれしいです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- 世界情勢 韓国の尹政府から眺めた日韓関係と成り立たせの可能性は。? 4 2022/05/25 08:06
- 哲学 精神科医が行う精神治療の最終形態とは? 2 2023/08/05 11:23
- Excel(エクセル) エクセルのマクロを2つご指南ください 3 2023/01/02 12:16
- 中途・キャリア 転職活動における最終面接につきまして 2 2023/05/31 17:16
- 囲碁・将棋 日本議員はいつもモメてますが、日本棋院もモメる事があるんですね? 2 2022/10/15 09:02
- スピーカー・コンポ・ステレオ レコードのマトリクス番号の見方を教えてください。 最近レコードの知識が少しずつ増え、最近マトリクス番 1 2022/08/14 13:58
- 婦人科の病気・生理 これは陽性でしょうか?陰性でしょうか? 3 2022/11/14 15:58
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
とっておきの「まかない飯」を教えて下さい!
飲食店で働く方だけが食べられる、とっておきの「まかない飯」。 働いてらっしゃる方がSNSなどにアップしているのを見ると、表のメニューには出てこない秘密感もあって、「食べたい!!」と毎回思ってしまいます。
-
カーソル0件の時にエラーを発生させる
Oracle
-
ストアドプロシージャ_カーソルのヒット件数
その他(データベース)
-
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
-
4
PL/SQLカーソルの2重FORループができません
Oracle
-
5
PL/SQL PLS-00103エラーについて
Oracle
-
6
T-SQLで任意の箇所で強制終了する方法
SQL Server
-
7
異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle
-
8
変数が選択リストにありません
Oracle
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
単一グループのグループ関数ではありません。
Oracle
-
11
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
12
FROM の中で CASE を使えるでしょうか
SQL Server
-
13
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーソルを使って、最終行レコ...
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
クエリの実行時間の目安
-
ACCESSで一括処理する方法
-
カーソルオープンの処理について
-
SELECT と INSERT の速度
-
(x 行処理されました)を表示さ...
-
データ型でFloatとreal の計算...
-
わり算の結果が整数でも小数点...
-
300万件のデータの処理について
-
PL/SQL で continue ?
-
ストアドプロシージャ_カーソル...
-
SQLServer2008パフォーマンスUP...
-
NVLとDECODEのスピード差
-
カーソルがコミットするとクロ...
-
CでSQLのテーブルを読む
-
Accessで処理経過を表示したい...
-
差し込み後、元データを変更し...
-
フィルターかけた後、重複を除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
クエリの実行時間の目安
-
カーソルを使って、最終行レコ...
-
データ型でFloatとreal の計算...
-
カーソル宣言をIFで分けられま...
-
ACCESSで一括処理する方法
-
ストアドプロシージャ_カーソル...
-
NVLとDECODEのスピード差
-
Accessで処理経過を表示したい...
-
(x 行処理されました)を表示さ...
-
SELECT と INSERT の速度
-
SQL plus で改行
-
わり算の結果が整数でも小数点...
-
RDBとVSAMの比較
-
動的SQLの処理件数
-
PL/SQL で continue ?
-
カーソルがコミットするとクロ...
-
カーソルオープンの処理について
-
300万件のデータの処理について
おすすめ情報