つい先日、ここで「T-SQLのカーソルにパラメータは使えますか?」という質問をして、使えることがわかって解決したんですけど、
実際にプロシージャで使ってみると、カーソルから結果が返りません。
以下のように書いています。
CREATE PROCEDURE hoge(@param1 int) AS
DECLARE C1 CURSOR FOR
SELECT CODE_1 FROM TableA
WHERE COLUMN_1 = '0' AND COLUMN_2 = @param1
BEGIN
....
END
@param1をローカル変数に代入し、そのローカル変数をカーソルに書いても同じです。
また、カーソル定義の「@param1」をプロシージャ実行時の引数に渡していた数値に書き換えると結果は返ります。
T-SQLは初めてなもので原因が全く分かりません。
何が間違っているのでしょうか?
No.1ベストアンサー
- 回答日時:
カーソル宣言の部分だけ書かれても、そのカーソルが正しく利用されているかは判断できません。
ストアドプロシジャでカーソルを利用する、簡単な例を以下に示します。
●表定義&データ例
create table t1
(c1 int,
c2 varchar(8))
insert into t1 values(1,'A')
insert into t1 values(1,'AA')
insert into t1 values(1,'AAA')
insert into t1 values(1,'AAAA')
insert into t1 values(2,'B')
insert into t1 values(2,'BB')
insert into t1 values(2,'BBB')
●ストアドプロシジャ
create procedure sp_hoge @ic1 int as
--カーソル使用例
declare @oc1 varchar(8)
declare @oc2 varchar(8)
--カーソル宣言
declare cr1 cursor for
select * from t1 where c1=@ic1
--カーソルオープン
open cr1
--FETCH(行の取り出し)
fetch next from cr1 into @oc1,@oc2
--LOOP
while (@@fetch_status <> -1) --エラーまたはEOFでない間
begin
if (@@fetch_status <> -2) --EOFでなければ何か処理をする
begin
print @oc2
end
--FETCH(行の取り出し)
fetch next from cr1 into @oc1,@oc2
end
--カーソルクローズ
close cr1
return
go
●ストアドプロシージャ実行
exec sp_hoge 1
go
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Visual Basic(VBA) VBA 画面上のカーソルに文字数字を入力するコードを教えて下さい 1 2022/10/30 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の置換
-
PL/SQLでの参照
-
Texの枠囲み調節
-
[Oracle9i]PL/SQLでFETCHしても...
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
-
Statement ignored というエラー
-
SQL*Loaderでのsysdate使用
-
ACCESS2007インポート時の空白...
-
日付の切り出し方法について
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQL*Plusの終了はquit?exit?
-
Access VBAで行ラベルが定義さ...
-
Accessでグローバル変数を宣言...
-
sqlplusでヘッダーが付かない
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
【Excel VBA】 WorksheetやRa...
-
ストアドプロシジャからストア...
-
ODBCリンクの際にACCESSでは読...
-
SQL*PLUSでの分秒までの表示の仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLカーソルの2重FORループ...
-
PL/SQLでのSQL文法
-
Texの枠囲み調節
-
カーソル定義での条件分岐
-
ORA-00904:無効な識別子の回避...
-
PL/SQLのOPEN cursor_name FOR...
-
mysqlのcase文で複数の条件を指...
-
自動連番でカラムを更新したい
-
カーソルフェッチにて、最終レ...
-
PL/SQL カーソルのFROM句にカー...
-
PL/SQLにて、マスタから取得し...
-
【PL/SQL】LOOPした動的SQLにて...
-
カーソルループ内部でログを出力
-
ROW_NUMBER BY PL/SQL
-
T-SQLのカーソルで
-
カーソルで集合関数を使った場...
-
PL/SQLでの参照
-
PL/SQLのカーソルについて
-
PL/SQLでカーソルを指定する方法
-
Accessのマクロでモジュールを...
おすすめ情報