プロが教える店舗&オフィスのセキュリティ対策術

select文で、まずデータが何件あるかカウントしたあと、
そのカウントした数の分だけ、ループしたいです。

ループに入れ込みたいSQLは以下のような感じです。

1.select 1a,1b from TABLE1 where 条件;
2.select 2a,2b from TABLE2 where 条件;

カウントした数の受け渡しとかも、分からないような状態なのですが、
初心者向けに教えていただけないでしょうか。

宜しくお願いします。

A 回答 (3件)

お返事が遅くなって申し訳ございませんでした。


ちょっと仕事でバタバタしてたもので・・・。

で、回答なのですが・・・Update文ならわかるのですが、SELECT文はわかりません(>_<)
ごめんなさい~。
とりあえず、Update文の場合です。(Ora8.1.7にて確認。)

--------------------------------------------------
DECLARE

wCount NUMBER(3);
wLoop NUMBER(3);

CURSOR CSR1 IS
SELECT Count(*) As 件数
FROM テーブル名1;

BEGIN

OPEN CSR1;
FETCH CSR1 INTO wCount;
CLOSE CSR1;

FOR wLoop IN 1..wCount LOOP
UPDATE テーブル名2 SET フィールド名=値;
END LOOP;

COMMIT;

END;
/
--------------------------------------------------

単純にUpdate文のところをSelectにしてみると、エラーになっちゃうんですよね・・・。
うーん・・・。

この回答への補足

もしかしたら、"DECLARE~bigin~end"、この文を打つ権限が無いかもしれないです~。
(今、上の人に確認してもらってます)

文だけ読むと、
内容的には、こんな感じの事がしたい!って感じです。

補足日時:2005/08/25 16:30
    • good
    • 0

たびたびすみません。


ちょっと思いつきました。

-------------------------------------------------------------------
set echo off
set sqlprompt "--[SPOOLING...]> "
set heading off
set feed off
set timing off
set pages 0
spool temp.sql

SELECT
'SELECT 1a,1b,1c FROM TABLE1 WHERE 1a ='||count(TblB.TABLEのキー)||';'
||chr(10)||
'SELECT 2a,2b,2c FROM TABLE2 WHERE 2a='||count(TblB.TABLEのキー)||';'
FROM TABLE TblA, TABLE TblB
WHERE TblA.TABLEのキー>=TblB.TABLEのキー
GROUP BY TblA.TABLEのキー;

spool off
set heading on
set feed on
set timing on
set pages 1000
SET SQLPROMPT "SQL> "
set echo on
@temp
-------------------------------------------------------------------

spoolファイルを使ってみました。
一度、「temp.sql」というファイルにSQL文を書き出して、「@temp」でそのSQL文を実行しています。
SQL文を見て見たければ、「temp.sql」を自分でわかりやすいファイル名に変更して

spool c:\test.sql
(省略)
@c:\test.sql

とやってみてください。
連番を取得するのために、SQL文が複雑になってます。
単純に

SELECT
'SELECT 1a,1b,1c FROM TABLE1 WHERE 1a ='||rownum||';'
||chr(10)||
'SELECT 2a,2b,2c FROM TABLE2 WHERE 2a='||rownum||';'
FROM TABLE;

でもOKなような気もしますが・・・rownumがどんな場合でもきちんと1から連番になってくれる
のかはっきりしなかったので、今回は見送りました。

不明な点がありましたら書きこんでください。
(またお返事が遅くなるかもしれませんが・・・。)
    • good
    • 0
この回答へのお礼

いろいろ検討してくださって、ありがとうございました。
もう少し、自分でも調べてみたいとおもいます。

お礼日時:2005/09/07 15:33

補足をお願いします。



Oracleのバージョンはなんですか?

プログラムはどこに書いて、実行するのには何のツールを使いますか?
(SQLPlus?ストアドプロシージャ?トリガー?VB?Access?)
具体的に決まっていないのであれば、どういう状況で、どうしてその
処理を実行したいのか、また何度も繰り返し行うのか・・・等の詳細を
教えてください。

> ループに入れ込みたいSQLは以下のような感じです。
> 1.select 1a,1b from TABLE1 where 条件;
> 2.select 2a,2b from TABLE2 where 条件;

ということは、データの件数分SELECT文を発行する = 条件にあう
データを表示するだけ ですか??更新等ではなく?
また、この意味は、1件目で「select 1a,1b from・・・」、2件目では
「select 2a,2b from・・・」、3件目「select 3a,3b from・・・」
ということでしょうか?

この回答への補足

補足します。

oracle10gで、SqlPlusを使っています。
やりたいことはselect文発行のみです。(それ以上の権限が無いもので...)

カウントされたデータの数が9であれば、
1.と2.の両方とも9回ループしたいという意味です。

言葉不足のヤヤコシイ表現になっていまい、すみません。_(._.)_

また説明不足な点がありましたら、補足させていただきます。
よろしくおねがいします。

補足日時:2005/08/19 17:44
    • good
    • 0
この回答へのお礼

やりたい事のイメージとして、

select count(*) from TABLE;
COUNT(*)
----------
 5


このカウントされた5を元に、
1から5までをループを回す

select 1a,1b,1c from TABLE1 where 1a = 1~5;
select 2a,2b,2c from TABLE2 where 2a = 1~5;

しかし、
上のselect文を1~5までループして後に、
下のselect文がスタートするのではなく。(図1)

(図1)
1a | 1b | 1c   ←上のセレクト文
---------------
1

1a | 1b | 1c
---------------
2




2a | 2b | 2c   ←下のセレクト文
---------------
1

2a | 2b | 2c
---------------
2




上のselect文の1が発行されたら、下も1を発行し、
つづいて2,3,…という風に交互に表示したいのです。(図2)

(図2)
1a | 1b | 1c   ←上のセレクト文
---------------
1

2a | 2b | 2c   ←下のセレクト文
---------------
1


1a | 1b | 1c   ←上
---------------
2

2a | 2b | 2c   ←下
---------------
2




webなどを探しても、同じ例が見つけられなかったので、
宜しくお願いします。

お礼日時:2005/08/23 16:57

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

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