
下記PLSQLを実行した時に(sqlplus上で、@XXXX.SQLと実行)
WCOUNT :=WCOUNT + 1; エラー
PLS-00201: 識別子WCOUNTを宣言してください
のエラーがでます
宣言をしているのですがわからず、お助けください
また、他にもこのエラーを処置したあとに問題と
なりそうな箇所があれば指摘お願いします
-やろうとしてること
(1)テーブルA を、男子を出席順に読み込んでその読み込んだ順番に
1から番号をふり、テーブルBへ新規追加する
(2)テーブルAからテーブルBに新規追加していない女子を、出席順に読み込んで
1から番号をふり、テーブルBへ新規追加する
(3)テーブルBのKEYは順番のみ
(4)テーブルBのINSERT分は、今後機能追加する予定なのでNOT IN使用する
-組んだPL/SQL(2つのINSETを1つのファイルに記述しています)
DECLARE
WCOUNT number;
CURSOR カーソル IS
SELECT 出席番号,名前,成績 FROM テーブルA
ORDER BY 出席番号;
BEGIN
FOR r IN カーソル LOOP
INSERT INTO テーブルB
(r.順番, r.名前,r.出席番号)
VALUES (WCOUNT,r.名前);
COMMIT;
WCOUNT :=WCOUNT + 1;
END LOO;
/
END;
DECLARE
CURSOR カーソル IS
SELECT 出席番号,名前,成績 FROM テーブルA A
WHERE A.出席番号 NOT IN (SELECT B.出席番号 FROM テーブルB B)
ORDER BY 出席番号;
BEGIN
FOR r IN カーソル LOOP
INSERT INTO テーブルB
(順番, 名前)
VALUES (WCOUNT,r.名前);
COMMIT;
WCOUNT :=WCOUNT + 1;
END LOOP;
/
END;
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
タイプミスがありました。
一行目のVARですが・・
VAR WCOUNT NUMEBR => VAR WCOUNT NUMBER
SQL*PLUS上なら、特別な作業を必要とせずに、バインド変数は使えるはずです。
No.1
- 回答日時:
投稿されたSQLは、明らかな転記ミスと思しき箇所があるので、
何が転記ミスで、何が本来の問題点なのか区別が付かないのですが・・
declare ~(a)~ begin ~(b)~ end;
/
declare ~(c)~ begin ~(d)~ end;
/
という一連のスクリプトの場合、(a)で定義した変数は、(b)で有効ですが、
別の無名ブロックである(d)では、利用できません。改めて(c)で定義する必要があります。
無名ブロック間で変数を共有する場合、declareで定義するPL/SQL変数ではなく、
バインド変数を使います。(SQL*PLUSのVARコマンド参照)
--ここから
VAR WCOUNT NUMEBR
DECLARE
CURSOR カーソル IS
SELECT 出席番号,名前,成績 FROM テーブルA ORDER BY 出席番号;
BEGIN
FOR r IN カーソル LOOP
INSERT INTO テーブルB (r.順番, r.名前,r.出席番号) VALUES (:WCOUNT,r.名前);
COMMIT;
:WCOUNT := :WCOUNT + 1;
END LOOP;
END;
/
DECLARE
CURSOR カーソル IS
SELECT 出席番号,名前,成績 FROM テーブルA A
WHERE A.出席番号 NOT IN (SELECT B.出席番号 FROM テーブルB B)
ORDER BY 出席番号;
BEGIN
FOR r IN カーソル LOOP
INSERT INTO テーブルB (順番, 名前) VALUES (:WCOUNT,r.名前);
COMMIT;
:WCOUNT := :WCOUNT + 1;
END LOOP;
END;
/
--ここまで
カーソルループの中で、コミットしてるのは、気になったのですが、そのままにしています。
また、スクリプトファイル中での空行は気をつけた方がいいですよ。
この回答への補足
返信ありがとうございます
早速訂正し、SQLplus上にて実行したところ
SP2-0552: バインド変数”WCOUNT”が宣言されていません。
のエラーがでてしまいました
バインド変数を利用するのに何か設定がいるのでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Oracle update文で質問です。 下記の条件でupdateをしたいですが、どのようにしたら良いでしょうか。 2 2022/06/23 10:51
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- PostgreSQL postgreSQL カラムの全ての値を取得したい 3 2022/10/07 12:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
ACCESSの初心者質問(テーブル設計)
-
重複するキーから一番古い年月...
-
2つのテーブルから条件に一致...
-
[Oracle] UPDATE分の副問い合わ...
-
行方向のデータを横に並べる
-
ACCESS2007 フォーム 「バリア...
-
インデックスの再構築の意味っ...
-
Access VBA Me.Requery レコー...
-
大学でSQLの授業があるのですが...
-
ACCESSで複数テーブルを結合し...
-
SQLServer Insertが遅い
-
ビューにインデックスを設定で...
-
SQLServerでOracleシーケンスの...
-
Accessの重複クエリで最小以外...
-
#ワークテーブルにinsert時 変...
-
システムテーブルについての疑問
-
2つのテーブルからデータを抽出
-
【SQLServer】IS NULLのパフォ...
-
実行時エラー3086 削除クエリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
主キーの変更
-
update文で質問です。 下記の条...
-
ACCESS 一つのフィールドに複...
-
PLSQLの識別子エラー
-
accessで移動平均する方法
-
Accessユニオンクエリーで2つ...
-
続.ORACLEのSELECTのソートに...
-
Accessでフィールドを比較した...
-
行方向のデータを横に並べる
-
自分自身への矢印
-
SQL(Where句)
-
テーブルを分けるべきか
-
項目内の改行がレコードの終わ...
-
履歴を管理するテーブル構造に...
-
アクセスで重複データが消えて...
-
VIEWでテーブルの集計結果...
-
項目長変更後の処理について教...
おすすめ情報