こんにちは。教えてください。
PL/SQLを使うのが初めで戸惑っています。
まず、PROCEDUREで
===========================
BEGIN
SELECT NAME FROM TABLE1 WHERE NAME='tanaka';
END;
/
===========================
このように書いて実行させようとすると、「コンパイルエラー」
「INTO句はこのSELECT文に入ります」というエラーが出ます。
SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに??
ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて
わかりませんでした。
PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
コーディング例です。
**************************************************
*非ループ処理の例
**************************************************
.CREATE OR REPLACE PROCEDURE JOB1
.IS
.
. w_NAME1 CHAR(10);
.
.BEGIN
.
. SELECT NAME1 INTO w_NAME1 FROM TABLE1
. WHERE TBL1_KEY = 'tanaka';
.
. UPDATE TABLE2 SET NAME2 = w_NAME1
. WHERE TBL2_KEY = 'tanaka';
.
. COMMIT;
.
.EXCEPTION
. WHEN OTHERS THEN
. ROLLBACK;
.END;
./
**************************************************
*ループ処理の例
**************************************************
.CREATE OR REPLACE PROCEDURE JOB2
.IS
.
. w_TABLE1 TABLE1%ROWTYPE;
.
. CURSOR c_TABLE1 IS
. SELECT NAME1
. FROM TABLE1
. ORDER BY NAME1;
.
.BEGIN
.
. OPEN c_TABLE1;
.
. LOOP
. FETCH
. c_TABLE1
. INTO
. w_TABLE1;
. EXIT WHEN c_TABLE1%NOTFOUND;
.
. UPDATE TABLE2 SET NAME2 = w_TABLE1.w_NAME1
. WHERE TBL2_KEY = w_TABLE1.w_TBL1_KEY;
.
. END LOOP;
.
. CLOSE c_TABLE1;
.
. COMMIT;
.
.EXCEPTION
. WHEN OTHERS THEN
. ROLLBACK;
.END;
./
先頭のピリオドは無視してください。どこかにミスがあったらごめんなさい。
回答ありがとうございます。
ご丁寧にコードでの解説、すごくわかりやすかったです。
実際mori0309さんのコーディングを参考に実行してみたら
値を取得することができました。
今回の業務はこれで事足りるのですが、これからも使うことがあると思うので
ちゃんと理解するよう勉強したいと思います。大変参考になりました。
どうもありがとうございました。
No.3
- 回答日時:
こんにちは、jotarou といいます。
コーディングは、ishmaster さんので良いと思います。
>ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎてわかりませんでした。
これに関しては、”暗黙カーソル”と入れてお調べください。
>SQLServerで使っていたSQLでは通用しないのでしようか・・・。
難しいとは聞いているのですが、全くの初心者でないのでしたら、通用する部分があると思いますけど・・・。
では・・。
回答ありがとうございます。
教えていただいたとおり、暗黙カーソルでたくさんヒットしました。
まず、カーソルとはなんぞや、から勉強しないといけません。
一冊本を買ってじっくり取り組もうと思います。
みなさんに教えていただいたこと大変勉強になりました。
また質問することもあると思いますがよろしくお願い致します。
No.2
- 回答日時:
PL/SQLでSelect文を使うときには、カーソルなり変数(ishmasterさんの言っている領域)に代入する必要があります。
でないと、Select文で引っ張ってきたデータを使うことができません。変数・カーソルへの代入というと構文が少し変なのですが、ishmasterさんの構文でデータベースからデーターを持ってこれると思ってください。
PL/SQLは、Select文は普通のSQLと少し違いますが、INSERT、DELETE、UPDATEはほとんど普通に使えます。ただし、CREATE、DROPなどは原則として使えません。(方法はありますが・・・)
回答ありがとうございます。
私はVBやAccessのように単純なSQLをぽんぽんと並べれば
実行してくれるのかと勘違いしていました。
そうではないんですね。
少し勉強しないとだめみたいです。
みなさんに教えていただいたことを頭にいれてがんばりたいと思います。
ありがとうございました。
No.1
- 回答日時:
SELECT NAME INTO work FROM TABLE1 WHERE NAME='tanaka';
じゃないでしょうかねえ。
INTOで読み込まれる領域を指定するんではないかと。
PL/SQLは知りませんが。
この回答への補足
さっそくの解答ありがとうございます。
領域ですか。
領域とは・・・・・・・????
環境を書き忘れていました。
WinNT4.0(SR6)
Oracle8
ObjectBrowser7.0
です。
OracleもObjectBrowserも使うのが初めてで右も左もわからない状態です。SQLServerで使っていたSQLでは通用しないのでしようか・・・。
回答ありがとうございました。
せっかく教えていただいたので理解力不足ですみませんでした。
みなさんの回答を参考に、しっかり勉強致します。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
誕生日にもらった意外なもの
みなさんがもらった誕生日プレゼントで面白いものがあったらぜひ教えてください!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
PL/SQLのコンパイルエラーについて(ignored)
Oracle
-
カーソル0件の時にエラーを発生させる
Oracle
-
-
4
PL/SQLでログを確認したい。
Oracle
-
5
単一グループのグループ関数ではありません。
Oracle
-
6
Statement ignored というエラー
Oracle
-
7
PL/SQLによるCREATE TABLE後のINSERTができない
Oracle
-
8
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
9
PL/SQLの変数について
Oracle
-
10
selectの単純繰り返し
Oracle
-
11
Oracleの排他制御について教えてください
その他(データベース)
-
12
PL/SQLカーソルの2重FORループができません
Oracle
-
13
IFで条件を分岐させてのINSERT(ストアド)。
SQL Server
-
14
データの先頭文字の置換
Oracle
-
15
CASE文のエラーについて
Oracle
-
16
ROWNUMでUPDATEをしたいのですが・・・。
Oracle
-
17
オブジェクトブラウザでデータをエクスポート/インポートする方法
その他(データベース)
-
18
INSERT文でフィールドの1つだけを他のテーブルから取ってきた値を入れたい
その他(データベース)
-
19
オラクルのUPDATEで複数テーブル
Oracle
-
20
Oracle複数の表をもとにmerge文を実行
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[Oracle9i]PL/SQLでFETCHしても...
-
Access VBAで行ラベルが定義さ...
-
重複するIDのデータを1行にま...
-
Accessのマクロでモジュールを...
-
ストアド実行時のエラー「参照...
-
キャッシュを使わずにSELECTを...
-
VBA プロシージャの名前の取得
-
Oracle 10g 他スキーマの参照権...
-
PL/SQLでSPOOLさせたいのですが...
-
SQL*Loaderでのsysdate使用
-
sqlplusのspoolで空白行出現
-
VB.NET Type.GetFieldsメソッド...
-
Excel:ThisWorkbookオブジェク...
-
ExcelのSUMPRODUCTで日付の範囲...
-
Oracle 10gで順序sequenceの作...
-
sqlplusでヘッダーが付かない
-
OutlookVBAで作成したマクロに...
-
Statement ignored というエラー
-
ORACLEからの値取得字の文字化...
-
SQL*PLUSでの分秒までの表示の仕方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLカーソルの2重FORループ...
-
PL/SQLでのSQL文法
-
カーソル定義での条件分岐
-
Texの枠囲み調節
-
自動連番でカラムを更新したい
-
PL/SQLにて、マスタから取得し...
-
PL/SQL カーソルのFROM句にカー...
-
カーソルフェッチにて、最終レ...
-
ORA-00904:無効な識別子の回避...
-
カーソルループ内部でログを出力
-
T-SQLのカーソルで
-
PL/SQLで
-
PL/SQLのOPEN cursor_name FOR...
-
PL/SQLでカーソルを指定する方法
-
PL/SQLでの配列についてetc
-
PL/SQLでFORの働き
-
[Oracle9i]PL/SQLでFETCHしても...
-
同一表に同一データがある場合...
-
PL/SQL)Functionの引数(文字列...
-
【PL/SQL】CURSOR ・・・ IS SE...
おすすめ情報