>>877 マニュアル無いんかよ。
FETCH IN カーソル名;
でいけると思うが。
すいません、SQL質疑応答スレにも書いたんですが、こっちの方が人が居るみたいなんで… マルチですいません。 oracle9iで1つのカラムに入っているレコードを全て1行で取得したいのですが。 例えば、 id ---- 1 2 3 を id ---- 1,2,3 の様にSQLのみで1行で取得するにはどうすればいいでしょうか? レコードの数は不定です。 よろしくお願いします。
>>879 SQL質疑応答スレでも見たがOracle使っていないのでスルーした。
SQLのみだと多分無理。
882 :
NAME IS NULL :04/05/20 21:14 ID:MDqr7Awj
テーブルXから10行、10列からできた値を取り出して、 他のテーブルYに取ってきた値を加算してやりたいのですが、 TABLE X A|B|C|D|E|F|G|H|I|J --------------------- 1|2|3|4|5|6|7|8|9|10 1|2|3|4|5|6|7|8|9|10 1|2|3|4|5|6|7|8|9|10 .................... 1|2|3|4|5|6|7|8|9|10 TABLE Y A|B|C|D|E|F|G|H|I|J --------------------- 1|2|3|4|5|6|7|8|9|10 1|2|3|4|5|6|7|8|9|10 1|2|3|4|5|6|7|8|9|10 .................... 1|2|3|4|5|6|7|8|9|10 下のようなテーブルYを作りたいんですが、 A|B|C|D|E|F|G|H|I|J --------------------- 2|4|6|8|10|12|14|16|18|20 2|4|6|8|10|12|14|16|18|20 2|4|6|8|10|12|14|16|18|20 .................... 2|4|6|8|10|12|14|16|18|20 このようなDo Until EOF LOOPというのを 使ってSQLをつくらないといけないのですが どうやって加算してSQL文をつくってやればいいのか わかりません。ご教授お願いします。
>>882 主キーが無いどころか、行を見分けることもできへんがな。
884 :
初心者です。 :04/05/21 00:18 ID:gInREXze
linuxで、データベースを学びたいです。 どのようにすれば良いか教えていただければ教えてください。 お願いします。
2chなんかうろついてないで、本でも買いなさい。
table(id serial, in text, out text) inはmd5hash文字列、outは普通の文字列 つまり 1, aaa, xxx 2, aaa, yyy 3, bbb, xxx 4, ccc, zzz などというテーブルを作ったのですが、selectすると結果が返ってくるまでに かなり時間がかかってしまいます。(1分ほど?) データは100万行単位で、だいたい500万行ほどだと思います。 Debian woodyとPostgreSQL1.42で作っています。 テーブルの構成など、どこかおかしい点があるでしょうか? リアルタイムで結果が返ってきて欲しいのですが、こんなに時間がかかるものなのでしょうか? どうかよろしくお願いします。
>>887 主キーやインデックスの設定は?取得件数は?
全件を取得するならそれなりにかかるだろう。
>>888 ええっと、主キーは一個目の要素のidで、取得件数は上限無しです。
ただしselectの条件は、where in = aaaみたいに、一つに固定です。
aaaとbbb両方とかは無いです。
インデックスの設定ってのはどういう事でしょうか…。
ちょっと質問した事後になっちゃうんですが、調べてきました。 CREATE INDEX tableindex ON table(in); としてインデックスを作っておくと、inを条件として検索するときに高速になる という解釈であってるのでしょうか? けど、調べてみると、頻繁にデータの挿入がある場合はインデックスの更新の方に 時間を取られるから、インデックスを使わない方が良いとありました。 かなり頻繁にデータの挿入があるのですが、そこのところどうでしょうか…。
現在の更新速度に不満が無いなら、とりあえずインデックス貼ってみて 実用に耐えられないほど、パフォーマンスが落ちるようならあきらめたら? あとは、idで検索できるようにがんがる。 でも、PostgreSQLって、インデックスが糞って聞いたけど本当なのかな。
>>891 とりあえずinのindexを作ってはみたんですが…。
なんというか、早い時は早いんですが、作ってない時と差がないほど遅い時もありますね。
>あとは、idで検索できるようにがんがる。
これは例えばどういう方法でしょうか?
idはただの番号で、inの中身とは何の関連性も無いのですが…。
>>892 7.2の頃まではインデクスの使い方が下手
(ちうか評価関数がいいかげんだった?)だが、
最近はいい感じだぞ、と、Postgresスレで読んだ。
最近鬱で読んでないので、pgスレ読まずにカキコ
>>892 VACUUM ANALYZE; したのか?
>>894 やってないです…。
vacuumdb --analyze dbname
ですよね?
で、vacuum analyzeして来たのですが…。 多少早くなったかな〜?って程度で、やはり遅い時には結果が返ってくるまで 1分くらいかかります。 pg_dumpしても100M程度のさほど大きくないDBなんだけどなぁ…。 こんなもんなんでしょうか。 他のもっと大規模なDBとかどうするだろう…。
>>897 ってことは、text inは重複が多くてIndex Scanされてないんだろ。
EXPLAIN して確認しる。
exeplain analize selece を適当な条件で何度かやってみました。 Seq Scan on table (cost=0.00..47667.09 rows=13682 width=34) (actual time=2716.98..62269.67 rows=18703 loops=1) Total runtime: 62738.51 msec Seq Scan on table (cost=0.00..47667.09 rows=13682 width=34) (actual time=3039.36..61721.74 rows=18703 loops=1) Total runtime: 62142.23 msec Index Scan using tableindex on table (cost=0.00..23.40 rows=5 width=34) (actual time=62.77..62.77 rows=0 loops=1) Total runtime: 99.44 msec Index Scan using tableindex on table (cost=0.00..23.40 rows=5 width=34) (actual time=52.05..52.06 rows=1 loops=1) Total runtime: 52.67 msec Seq Scan on table (cost=0.00..47667.09 rows=137412 width=34) (actual time=3103.91..61569.79 rows=148918 loops=1) Total runtime: 62922.27 msec Index ScanじゃなくてSeq Scanてなってるのはインデックスを使わずに実表を 直接探してるって事ですよね、多分。 で、その時に時間が滅茶苦茶かかって、ヒットした行も桁違いですね。 898さんの仰った通りのようです。 これはどうやって解決すれば良いんでしょうか? in-outが1対n関係なのはどうしようもないし、データを減らすわけにも行かないし…。
>>899 の前に
数万行から十数万行を抽出して、その後どうするんだ?
>>900 ランダムで一行選ぶだけ…。
なので上限をつけても良いし、一番良いのはなんらかの評価関数を使って
一行選べればいいのですけど。
けど上限を例えば10にしたとして、返される結果はいつも同じデータにはならないのでしょうか?
その10個のデータ以外のデータがいつも選外になって無駄になると言うか。
>>901 そりゃまた...
1発でって案がうかばねぇな。
事前にゴニョゴニョして、ナニならごにょごにょ、なになら後如後如...
しかし更新頻度を考えるとごにょゴニョもあてにならねぇし。
おまいら、よろしくお願いいたします。 postgresql7.3を使っています。、yyyy/mm/dd hh:mm:ssというフォーマットで日付が格納されているレコードから hh:mmだけを抜き取りたい場合はどうすればよろしいでしょうか。
>>903 timestamp形式で格納されているのか、string型で格納されているのか、どっちよ。
前者なら to_char(timestampカラム ,'HH24:MI')
後者でもそのままtimestamp型に変換できそうだから、
to_char(stringカラム::timestamp,'HH24:MI')
でいけるだろ。
timestampす。どうもありがとう
906 :
もっと初心者用の質問板は? :04/05/27 03:27 ID:4G2IqA87
高1のPC初心者です。たぶん小学生レベルです。どこで聞けばいいのかわからないので教えて下さい。 A5とかB6のカードに一枚あたり200字程度の文字を書いたのをたぶん数千枚ぐらい書き溜めていくんですが、あとで書き足したり修正したりし易いようにと思って手書きをあきらめてPCを使うことにしました。 その数千枚を作って整理して管理していきたいんですけど、作った情報はたとえば次のような感じです(ツリー状)。 一.・・・ 1.・・・ @・・・ A・・・ 2.・・・ @・・・ A・・・ B・・・ 3.・・・ 二.・・・ 1.・・・ @・・・ A・・・ B・・・ C・・・ 2.・・・ @・・・ A・・・ データベースとかいう言葉を見たり聞いたりすることがあるんですけ、こういうなのをそう呼ぶんですか?全然ちがうのかなぁ?(汗) こういう何千枚ものカード(単なる文章)を作って管理するのって、そもそもPCのどこでするんですか?フォルダとかいう言葉も聞いたことありますが、ワードでやっていくんですか?ワードの中のどこでやっていくんですか?
>>906 立派なデータベース。
個人で管理するならAccessかExcel。
908 :
906 :04/05/27 09:12 ID:1qJEJa+z
>>907 ありがとうございます。
そうなんですか? マイドキュメントとかなんとかに、って人に教えられたような・・・。
それってワードじゃなかったんですか〜。。。
Accecc? Excel?
すいません、初歩的なことを全然知らないので。
>>908 Accessはキミにちと荷が重いような気がするし
安いものでもないので、
その手の情報を管理する「データベースソフト」はないかどうか、
他の板で尋ねてこい。もしかするとこの板他スレにその手の
話題があるかも知れんが知らん。
で、バイトするなり親にねだるなりして買ってもらうといいだろう。
そういう用途には、マトモな親は喜んで出資してくれるはずだ。
ちなみに俺は本職なのでむしろパーソナルユースには詳しくない。
で、DBでいろいろできるんだなと感じたら、またこのスレに遊びに来い。
…ていうか、その手の作業は、Microsoft Wordの
「アウトライン」モードを使えば容易なような希ガス
912 :
907 :04/05/27 12:50 ID:???
>>908 フォルダをカテゴリ別に分けてファイルごとに管理したいんなら
それでも構わんよ。
自分のわかりやすいように管理したらいい。
漏れがさっき言ったのは、
君の持ってる数千枚のカードを、一つのファイルで管理する方法。
昔のWindowsにはcardfileってのがついてたなあ。 あれ、いつから無くなったんだろう。
アウトラインプロセッサ使えば?
915 :
NAME IS NULL :04/05/28 05:29 ID:xjrgd4AW
Oracle や Microsoft SQL Server をウェブアプリケーションの バックグラウンドで使用する場合 どのライセンスの物を 買うのがお得なのでしょうか? 1プロセッサ などプロセッサ数でのライセンスはわかりやすいのですが クライアント数でのライセンスがよくわかりません 例えば5クライアントと10クライアントの場合だと具体的にどのような 違いがあるのでしょうか? 必要なクライアントの数え方がよくわからなくて困っています 宜しくお願い致します
NATURAL JOIN句に関して質問します。 某教科書には、 「両方の表で同じ名前とデータ型を持つ列に関してのみ結合が行われる。」 と書かれているのですが、 実際に試してみたところ、 同じ名前でデータ型の異なる列でも結合されて実行されるのですが、 どうなんでしょうか?宜しくお願いします。
917 :
NAME IS NULL :04/05/28 09:16 ID:S3LYW/Qg
メールフォームには写真が添付出来ないので、 フォームのHTMLソースを調べてアドレスを探そうと思ったのですが、 HTMLの中にメールアドレスらしきものがありませんでした・・・。 どうやったらフォームから相手のメール(受信)アドレスを知ることが出来ますか?
>915
Q. SQL Server 2000 には Internet Connector ライセンスはありますか?
また、インターネット環境で不特定多数のユーザー向けのサービスを提供するような場合、
どのようなライセンスが用意されていますか?
A. SQL Server 2000 をインターネット環境で使用し、不特定多数のユーザーからアクセスを
受ける場合、プロセッサ ライセンスを使用してください。 プロセッサ ライセンスは、Enterprise
Edition、Standard Edition で提供されており、インターネット/イントラネットを問わず無制限の
アクセスが許諾されます。 ただし、プロセッサ ライセンスは、SQL Server が稼動するサーバーに
搭載されるプロセッサ数分購入する必要があります。
ttp://www.microsoft.com/japan/sql/evaluation/license/license_qanda.asp
920 :
916 :04/05/28 14:34 ID:???
自己解決しました。バージョンによって違うようです。
921 :
NAME IS NULL :04/05/28 23:26 ID:b02UD6X2
異なる親テーブルを持つ子テーブルって作成することができないんですか? たとえば親テーブルを table1 table2 子テーブルを table3 とすると table1 table2 table3 A B C D E A C ------ ------- ---------- 0 あ 0 か 0 0 0 1 い 1 き 1 1 1 2 う 2 く 2 2 2 こんな構造にしてアプリ側で必要に応じて、親子関係の作成をしたいのです。 実際にやってみると table3 のA Cに適切なデータ型と値を割り振ってるのに 外部キーの制約違反だとエラーがかえります。 また最初の1行のみ(つまり行がないとき)まともに動くので (select update insert deleatがちゃんと使える)、 不可能ではないようなのですが? 回答よろしくお願いします。.mdbです。
922 :
NAME IS NULL :04/05/28 23:29 ID:b02UD6X2
>
>>921 table1
A B
--------
0 あ
1 い
2 う
table2
c d
-------
0 か
1 き
2 く
table3
E A C
--------
0 0 0
1 1 1
2 2 2
ですすみません
923 :
NAME IS NULL :04/05/29 06:22 ID:rioq5SCg
count関数について質問なのですが、列RETUに 各フィールドA A B B C C D D E E F F F G G G G というデータが入っていたとして、この時countを行うと、16 というふうにカウントされてしまうのですが、 これをAなら2 Bなら2 Fなら3というふうに、各項目ごとに カウントしたいのですがどうすればいいでしょう?グループ化を するのですか?
>>921 できるよ。
>>923 SELECT retu,count(retu) FROM table GROUP BY retu;
925 :
915 :04/05/30 05:17 ID:???
>>918 さん
ありがとうございます. 参考になりました.
返信遅くなってしまってすみません.
>>917 スレ違いだが…。
そのメールフォームからcgi等を呼び出してメールを送ってるはず。
従ってhtmlからaddressを取得するのは不可能。
大人しくメールフォームでaddressを聞くのが正しいかと。
927 :
NAME IS NULL :
04/05/31 23:14 ID:6O1ci7gM SQLServer2000を使用しています。 「警告:NULL値は集計またはその他のSET演算で削除されました」ってエラー が出力されたのですが、原因がわかる方、教えていただけないでしょうか? また、T-SQLのエラーメッセージがわかるHPがあれば教えていただきたいので すが・・・