
下記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も見ています
-
PL/SQLでPLS-00201のエラー
Oracle
-
Statement ignored というエラー
Oracle
-
PL/SQLのコンパイルエラーについて(ignored)
Oracle
-
-
4
正しいSQLなのに「ORA-00936: 式がありません。」となる
Oracle
-
5
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
6
カーソル0件の時にエラーを発生させる
Oracle
-
7
select句副問い合わせ 値の個数が多すぎます
Oracle
-
8
SQLPLUSで結果を画面に表示しない
Oracle
-
9
バインド変数について
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
重複するキーから一番古い年月...
-
主キーの変更
-
自分自身への矢印
-
具体的なSQLの質問。私にとって...
-
2つのテーブルから条件に一致...
-
ACCESS 一つのフィールドに複...
-
Accessでフィールドを比較した...
-
update文で質問です。 下記の条...
-
【Excel】月々のデータを年間通...
-
accessで移動平均する方法
-
テーブル値関数経由でのデータ更新
-
【Access初心者】最大値と次に...
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
3つ以上のテーブルをUNIONする...
-
SI Object Browserのテーブルス...
-
Accessにインポートしたら並び...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT時の行ロックの必要性に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
主キーの変更
-
accessで移動平均する方法
-
ACCESS 一つのフィールドに複...
-
行方向のデータを横に並べる
-
update文で質問です。 下記の条...
-
PLSQLの識別子エラー
-
Accessでフィールドを比較した...
-
VIEWでテーブルの集計結果...
-
ACCESSのコンパイルエラーについて
-
下記のsqlで取得されるレコード...
-
SQL文のCOUNTについて
-
続.ORACLEのSELECTのソートに...
-
履歴を管理するテーブル構造に...
-
PLSQLで集計関数の値を配列に入...
-
アクセス2000のフォームに...
-
ACCESS2000です。
-
複数テーブルの不一致クエリに...
おすすめ情報