• ベストアンサー

selectの単純繰り返し

oracle11gで sqlplusで接続して、とあるテーブルのselectを100回繰り返したいのですが for文はどう書けばよいのでしょうか ↓selectはこんなのでOKです select * from testtable;

  • Oracle
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

-------------------------------------------------------------------------------- DECLARE str VARCHAR2(2000); BEGIN DBMS_OUTPUT.PUT_LINE('----結果------'); FOR i IN 1..10 LOOP select dummy into str from dual; DBMS_OUTPUT.PUT_LINE(i||':'||str); END LOOP; END; ----結果------ 1:X 2:X 3:X 4:X 5:X 6:X 7:X 8:X 9:X 10:X PL/SQLが実行されました(0 msec.) --------------------------------------------------------------------------------

その他の回答 (2)

回答No.2

PL/SQL中でのSELECT文は、intoで受け取り変数を書いてあげないと・・

  • pon2pon2
  • ベストアンサー率42% (107/250)
回答No.1

今、手元に実機がないから検証できないけど、 SELECTを繰り返したいだけなら、こんな感じかな? 多分。 もし、insertとかしたいなら、LOOP後にCOMMIT忘れないように。 BEGIN FOR i IN 1..100 LOOP select * from testtable; END LOOP; END; /

ycae382905
質問者

補足

エラーが出てうまくいっていません。 お手数ですが教えていただけますか ※エラー内容を調べましたが関係なさそうなページばかりで、 さらにv$versionとtesttableでエラーが違うのもなぞです。 ================================================ SQL> begin 2 for i in 1..100 loop 3 select * from v$version; 4 end loop; 5 end; 6 / select * from v$version; * 行3でエラーが発生しました。: ORA-06550: 行3、列1: PLS-00428: INTO句はこのSELECT文に入ります。 SQL> SQL> begin 2 for i in 1..100 loop 3 select * from testtable; 4 end loop; 5 end; 6 / select * from testtable; * 行2でエラーが発生しました。: ORA-06550: 行4、列2: PLS-00103: 記号"END"が見つかりました。 SQL> ================================================

関連するQ&A

  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • select文でフリーズします。

    お世話になります。 oracle11.2で とあるテーブルに select * from テーブル名(条件なし) としたらフリーズする現象が起きました。 元々のテーブル内には25万行のデータがあったため 同じ構造で違う名前のテーブル(データは1行もなし)を新規作成して 同じようにselect文をなげたところこちらもフリーズしてしまいました。 構造は約50の列があり 列数を指定して検索した場合、どちらのテーブルも結果が返ってきますが すべての列を指定しようとするとフリーズしてしまいます。 どのあたりを疑えば良いでしょうか? よろしくお願いいたします。

  • SQLPLUSでセレクト結果の表示方法

    お世話になります。 SQLPLUSでselect * from AAA という風にセレクト結果を出力する場合 AAAテーブルのカラム数が多い場合改行されて出てきますが、 これを改行せずに1レコード1行で表示させられないでしょうか? 何かSQLPLUSのコマンド等をご存知の方いらっしゃったらご教授お願いいたします。

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?

  • sqlplusで日本語入力

    olacleを勉強して5時間の超初心者です。 sqlplusでselect文を入力したいのですが、 日本語が表示できません。 なにか設定があるのでしょうか? 手元にある本をみても何も書いていないのですが。。。 select name from table1 これはいけます! でも select nama as 名前 from table1 とsqlplusで入力できないのです。 「名前」という日本語入力ができないんです。 テキストにselect nama as 名前 from table1 と記入し、コピーペーストしようとしても コピーペーストもできません。 何か設定があるのでしょうか?

  • select for updateのロック

    オラクルのselect for updateでロックをするタイミングがいつですか? こんなPL/SQLのコードがあったとします。 ---↓↓↓ソースコードここから↓↓↓------------------------- select * from テーブル1 where id = 1 for update; ・・・・・(a) ~ update テーブル1 set kingaku=100 where id = 1 ・・・・・(b) ~ commit; ---↑↑↑ソースコードここまで↑↑↑------------------------- id = 1のレコードがロックされるのは(a)、(b)どちらのタイミングですか? また、このロックは ・他トランザクションから読めるけど更新できない ・他トランザクションからは読むことすらできない のどちらでしょうか? よろしくお願いします。

  • Oracleで「文字が無効です」のエラーが出ます

    Oracleで「文字が無効です」のエラーが出ます JavaからOracleに接続して、SELECT文を発行していますが、何度試しても上記のエラーが出ます。 発行しているSELECT文を、SQLPlusから打ち込むとちゃんと実行できます。 何が悪いのか見当がつきません。 お知恵をお貸しください。 ちなみに、対象テーブルの項目はvarchar2とnumberだけの項目ばかりで、日本語は使ってません。 また、Oracle初心者です。 環境 端末:WindowsXP Oracle:10g Express Edition ※文字コードはAL32UTF8 IDE:Eclipse3.5 ※設定-一般-ワークスペースのテキストファイルエンコードはUTF-8

  • Select文1 マイナス Select文2

    テーブルA ユーザーID,地名,県名,評価 テーブルB ユーザーID,県名,制覇flag のような二つのテーブルがあると仮定してSelect文1、 "select 県名,count(地名) from テーブルA where ユーザーID=1 group by 県名 order by count(地名);" の結果が 県名,count(地名) 北海道,30 東京,22 京都,15 名古屋,10 鳥取,9 沖縄,8 であるとし、 Select文2、 "select 県名 from テーブルB where usrid=1 and 制覇flag='true'" の結果が、 県名 北海道 東京 とします。 このSelect文1の結果から、Select文2の結果を引いて 県名,count(地名) 京都,15 名古屋,10 鳥取,9 沖縄,8 の結果を得るにはどうすればよいでしょうか? Mysqlのバージョンは5.0.21です。

    • ベストアンサー
    • MySQL
  • SELECT文中のFROM区

    SELECT文のFROM区にはテーブル名が並びますが、 SELECT … FROM TSCD001, TSCD002 TSCD002_SK, TSCD003 CT1001, TSCD004 TSCD004a WHERE … のように記述されているSELECT文があります。 FROM区の1行目(TSCD001)は理解できますが、 質問(1) 2行目 『TSCD002 TSCD002_SK』のような書き方はどのような 意味をもつのでしょうか?TSCD002はテーブル名だということは 分かっています。TSCD002_SKは何でしょう? (4行目も同様のパターンのようです)  質問(2) 3行目 『TSCD003 CT1001』のTSCD003はテーブルであり、 CT001もテーブルでした。このようにテーブルを半角スペースで 並べて書くのはどのような意味があるのでしょうか?

  • SELECTを含むUPDATEについて

    2つののテーブルがあり、テーブル1のデータを元にテーブル2を更新させたい場合、SELECT文を含むUPDATE文で更新出来ると思うのですが、どのようにしたら一番効率的でしょうか? 例)テーブル1~table1 no ken city ---------------------------------- 01 北海道 根室 03 青森 八戸 05 千葉 柏 08 埼玉 さいたま 09 東京 千代田区 例)テーブル2~table2 no ken city ---------------------------------- 01 02 03 04 05 06 07 08 09 テーブルが2つあり、テーブル1の情報を元にテーブル2を更新したい。 条件は、noが一致していること。 A) kenを更新するには、 ↓ UPDATE `table2` SET ken = (SELECT ken from table1 WHERE table1.no = table2.no) B) kenとcityを更新するには、 ↓ UPDATE `table2` SET ken = (SELECT ken from table1 WHERE table1.no = table2.no), city = (SELECT city from table1 WHERE table1.no = table2.no) SELECT以下が同じなのでもうちょっとスマートに短く記述する方法はあるんでしょうか?

    • ベストアンサー
    • MySQL