10代と話して驚いたこと

こんにちは。教えてください。
PL/SQLを使うのが初めで戸惑っています。
まず、PROCEDUREで
===========================
BEGIN

SELECT NAME FROM TABLE1 WHERE NAME='tanaka';

END;
/
===========================
このように書いて実行させようとすると、「コンパイルエラー」
「INTO句はこのSELECT文に入ります」というエラーが出ます。
SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに??

ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて
わかりませんでした。
PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。
よろしくお願いいたします。

A 回答 (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;
./

先頭のピリオドは無視してください。どこかにミスがあったらごめんなさい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご丁寧にコードでの解説、すごくわかりやすかったです。
実際mori0309さんのコーディングを参考に実行してみたら
値を取得することができました。
今回の業務はこれで事足りるのですが、これからも使うことがあると思うので
ちゃんと理解するよう勉強したいと思います。大変参考になりました。
どうもありがとうございました。

お礼日時:2001/05/14 22:14

こんにちは、jotarou といいます。


コーディングは、ishmaster さんので良いと思います。

>ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎてわかりませんでした。

これに関しては、”暗黙カーソル”と入れてお調べください。

>SQLServerで使っていたSQLでは通用しないのでしようか・・・。

 難しいとは聞いているのですが、全くの初心者でないのでしたら、通用する部分があると思いますけど・・・。

では・・。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいたとおり、暗黙カーソルでたくさんヒットしました。
まず、カーソルとはなんぞや、から勉強しないといけません。
一冊本を買ってじっくり取り組もうと思います。
みなさんに教えていただいたこと大変勉強になりました。
また質問することもあると思いますがよろしくお願い致します。

お礼日時:2001/05/14 22:12

PL/SQLでSelect文を使うときには、カーソルなり変数(ishmasterさんの言っている領域)に代入する必要があります。

でないと、Select文で引っ張ってきたデータを使うことができません。
変数・カーソルへの代入というと構文が少し変なのですが、ishmasterさんの構文でデータベースからデーターを持ってこれると思ってください。

PL/SQLは、Select文は普通のSQLと少し違いますが、INSERT、DELETE、UPDATEはほとんど普通に使えます。ただし、CREATE、DROPなどは原則として使えません。(方法はありますが・・・)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
私はVBやAccessのように単純なSQLをぽんぽんと並べれば
実行してくれるのかと勘違いしていました。
そうではないんですね。
少し勉強しないとだめみたいです。
みなさんに教えていただいたことを頭にいれてがんばりたいと思います。
ありがとうございました。

お礼日時:2001/05/14 22:08

SELECT NAME INTO work FROM TABLE1 WHERE NAME='tanaka';


じゃないでしょうかねえ。
INTOで読み込まれる領域を指定するんではないかと。
PL/SQLは知りませんが。

この回答への補足

さっそくの解答ありがとうございます。
領域ですか。
領域とは・・・・・・・????

環境を書き忘れていました。
WinNT4.0(SR6)
Oracle8
ObjectBrowser7.0
です。

OracleもObjectBrowserも使うのが初めてで右も左もわからない状態です。SQLServerで使っていたSQLでは通用しないのでしようか・・・。

補足日時:2001/05/11 17:36
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
せっかく教えていただいたので理解力不足ですみませんでした。
みなさんの回答を参考に、しっかり勉強致します。
ありがとうございました。

お礼日時:2001/05/14 22:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A