トップページ⇒tech
1001コメント392KB

SQL教えて〜!!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
データーベースのテストが水曜日にあります。
全くのチンプンカンプンで問題の意味すらわかりません・・
門題は「単価が30000円以上で40000円以下の商品名と単価を
表示する命令」です!!これをSQL文にして欲しいのですが・・
0446デフォルトの名無しさんNGNG
>>442だったスマソ鬱
0447デフォルトの名無しさんNGNG
>443
VBはともかく、SQLは今のところDBやる上で必須なのでやっておいて損は無いでしょう。
とりあえず、どっちもまだまだ現役なので時代遅れって事は無いと思うが。

ただ、いつまでもそれだけだと先が見えている事だけは事実。
0448442NGNG
>>444-445 例が悪かったですね。すいません。
テーブルが、
ID 有効率 可能回数
1   89.6  23
2   96.1  16
3   99.5  26
4  100.6  15
5  110.5  10
6  112.5   8

なら
ID 有効率 可能回数
3   99.5  26
4  100.6  15
5  110.5  10
6  112.5   8
の4レコードを抽出したいです。
0449デフォルトの名無しさんNGNG
全然、仕様が見えない。
対象テーブルにおいて、可能回数のMAX値を
持つレコード(この場合ID=3)の有効率(この場合99.5)
以上の有効率数値を持つレコードを抽出しろ
ということか?
しかしMAX値を持つレコードが複数あり、有効率が
それぞれ異なったらどうするのだ?
その場合は有効率が低い方を優先させるのか?
 しかし、これだと最初の442説明のID4は抽出
されてしまうので違うと思うが。。。

「可能回数が少ないくせに、・・・」
「くせに」なんていう言葉からどうロジックが組めるんだ?

もっと、仕様を的確に伝えてくれ。
抽出する場合の仕様は、削除対象を
伝えるのではなく、抽出すべき条件を
書いた方が伝わりやすい。
0450デフォルトの名無しさんNGNG
>441
おまえは単表でプログラムでも書いておけ
0451デフォルトの名無しさんNGNG
>>442 >>448
のサンプルと抽出結果が違うジャン
訳ワカランぞ
0452442NGNG
すみません〜、説明へたくそで。
抽出すべき条件は、自分自身よりも、有効率と可能回数の両方が大きい
レコードが存在しないレコード、を抽出したいです。

しかも、>>442が間違ってる。すいません。

ID 有効率 可能回数
1   89.6  23 ← ID=3のデータより両方小さいので捨てる
2   96.1  16 ← ID=3のデータより両方小さいので捨てる
3   99.5  26 両方大きいものはないので、抽出
4  100.6  15 ← ID=5のデータより両方小さいので捨てる
5  110.5  16 両方大きいものはないので、抽出

です。ごめんなさい。すいません。申し訳ない。
0453デフォルトの名無しさんNGNG
>452

select distinct ID, 有効率, 可能回数 from
(
select * from
(
select max(有効率) 有効率, from Table
) a, Table t
where a.有効率 = t.有効率
union all
select * from
(
select max(可能回数) 可能回数, from Table
) b, Table t
where b.可能回数 = t.可能回数
)

ちゅーかさ、これじゃ無いかって>>444で言ってるんだけど?
ちがうのか?

同じ数値が複数出てきてもよいのかい?<わかりずらいな
例えばだが、可能回数が全て26だったら、全レコード出てきても良い?

最後に、有効率と可能回数の最大値を、それぞれ取ってるから
おなじIDが複数出てくる可能性があるので一番上にdistinctを付けてみたけど
こんな感じでいいのかい?


ようは最大値を持ってきたいんでしょ
パフォーマンスを考えると素直に
最大値を2回持ってくるやり方の方が良いと思うぞ
0454449NGNG
>>452の例も間違いだ
ID=4は抽出だろ?
有効率がID5のそれよりも大きい値だぞ。
まぁ、いいや。

SELECT *
FROM table1 t
where not exists
(select * from table1 where (a > t.a and b >t.b) ) ;

0455442NGNG
>>454 え?452の例だと、ID=4は捨てです。あれ?捨てですよ。明らかに。
0456449NGNG
すまそ。テストのクエリーをそのまま
貼っちまった。
SELECT *
FROM table1 t
where not exists
(select * from table1 where (有効率 > t.有効率 and 可能回数 >t.可能回数) )
説明は
>>442の仕様通り
これで仕様を的確に書く必要がわかったろ?
(例が間違ってても、通じるということだ)
0457442NGNG
>>453 可能回数が全て26だったら、有効率が一番大きいレコードが
欲しいです。

>>454 「a」って?
0458デフォルトの名無しさんNGNG
>457
逆もあるだろ! 有効率が全部おなじ
もしくは全部同じちゅーのも考えられるわ
0459449NGNG
>>455
またまたすまそ。
ID=5の有効率
110.5を100.5とまちがえとった。
でもクエリーはこれでOKよ。
0460442NGNG
>>456 うっ。すごい(w 多分正解です。きれいだなぁ。感動。
ありがとうございます。
>>453 今自宅なんで、ACCESSしかないんですが、FROM句の構文エラーです
がでちゃいますぅ。
0461442NGNG
>>458 有効率が同じ場合、可能回数が大きいほうが欲しいです。
全く同じ場合、両方欲しいです。
0462デフォルトの名無しさんNGNG
>457と>461の条件の時は、きびしいでしょ
0463山神NGNG
>>438
ANSIで

select T1.F1,T2.F1,T3.F1 from T1 left outer join
(T2 inner join T3 on T2.F1=T3.F1) on T1.F1=T2.F1

と

select T1.F1,T2.F1,T3.F1 from (T1 left outer join T2 on T1.F1=T2.F1)
inner join T3 on T2.F1=T3.F1

は(+)だとどういうふうに書き分けるのですか?


>>440
だから実行のPlanだけやのうて上記2つのSQLは
結果も違うのですけど。
というか誰もplanなんぞ問題にしてないですが。
0464デフォルトの名無しさんNGNG
SQLServer2000SP1にて質問させてください。
ひとつのコードから、マスタテーブル内の対応する名称を取得する
というプレーンな情報取得についてなのですが、

1.外部結合によるオーソドックスな手法
2.ユーザー定義関数にコードを引数で渡し、
 関数内でマスタテーブルからデータを取得

おそらく1.のほうが早いんだろうとは思うのですが、
実際のところどうでしょうか?データ量にもよると
思いますが、どの程度のものなのでしょう?
データが取り揃わず検証できていない状況です。

ご経験ある方、お知恵をお借りできますか?
0465デフォルトの名無しさんNGNG
>269、>285 とかと同じなんですが、

xx件目から、??件を取り出すという場合、基準になる項目が重複可能な場合、
クエリー結果に連番を振るという手段しかないんでしょうか?

select top 10 F1,F2 from
(select top 4010 F1,F2 from T order by F1 asc)
order by F1 desc

(↑>274を参考にしました)や、

select top 10 F1,F2 from T
where F1 >
(select max(F1) from
(select top 4000 F1 from T order by F1) tbl
)
order by F1

のような方法では正しい結果が取れません。
連番方式は激烈に遅いので、避けたいです。

やっぱり、F1項目+ユニーク数値 などのダミー項目を作っておくとか、
姑息な手段しかないのでしょうか?

スカッと一発で解決できるSQLを教えてください。

ちなみに、Access2000とか、SQL Server7.0/2000 を想定しています
0466デフォルトの名無しさんNGNG
>>463
>select T1.F1,T2.F1,T3.F1 from T1 left outer join
>(T2 inner join T3 on T2.F1=T3.F1) on T1.F1=T2.F1

select T1.F1,T2.F1,T3.F1 from T1,T2,T3 where T1.F1 = T2.F1(+) and T1.F1 = T3.F1(+);

>select T1.F1,T2.F1,T3.F1 from (T1 left outer join T2 on T1.F1=T2.F1)
>inner join T3 on T2.F1=T3.F1

select T1.F1,T2.F1,T3.F1 from T1,T2,T3 where T1.F1 = T2.F1(+) and T2.F1 = T3.F1;
つかこれはエラーだな、これが通るRDBMSはあるのか?
Oracle SQLServer共にエラーが出た。

>だから実行のPlanだけやのうて上記2つのSQLは
>結果も違うのですけど。

何が言いたいのかよく分かりませんが、バカな私に説明していただけませんか?
というか、私はあなたのことかなりバカな人に見えるのですが。
0467デフォルトの名無しさんNGNG
>>463
Oraでいえば
T1.F1=T2.F1(+) and
T2.F1=T3.F1
は>>463の前者、後者どっちの結果を
期待してるのか見分けがつかん!
ということだろ。
Oraは外部結合から評価するので、>>463の後者となる。
従って、結局全て内部結合で結合した結果セットと同じ
となる。

ちなみにMSSQL-ver6以前 Sybaseの場合
T1.F1*=T2.F1 and
T2.F1=T3.F1
はエラーになる。

Oraユーザで>>463の前者の様な結果セットに
意味があるのか?(実際出来ても意味無し。)
後者の結果で返ってくるなら、内部結合使って
そんな結合しねぇよ。なんていう反論も出そう
だから、結合順序のコントロールだけではなく、
SQL92仕様の結合は、「結合と条件を明示的に分け、
条件と結合の評価順序をコントロールできること」
に対して有意性があると言った方が説得力がある
と思う。
結合と条件について詳しくは>>71前後
から書いてあるから読ぬ。
0468デフォルトの名無しさんNGNG
しかし3テーブル間の外部結合利用による方法は
MSSQL-ver6以前 Sybase
T1.F1*=T2.F1 and
T2.F1*=T3.F1
Ora
T1.F1=T2.F1(+) and
T2.F1=T3.F1(+) -Oracle
が普通だわな
これは期待する結果は一つだ。
SQL92で検証してみな
select T1.F1,T2.F1,T3.F1 from
(T1 left outer join T2 on T1.F1=T2.F1)
left outer join T3 on T2.F1=T3.F1
と
select T1.F1,T2.F1,T3.F1
from T1 left outer join
(T2 left outer join T3 on T2.F1=T3.F1)
on T1.F1=T2.F1
で。
だから、上の>>467の理由と併せると、
Oraユーザにうまく浸透しないのだよな。

0469デフォルトの名無しさんNGNG
>>467
>>463をどうよんでも
>SQL92仕様の結合は、「結合と条件を明示的に分け、
>条件と結合の評価順序をコントロールできること」
>に対して有意性があると言った方が説得力がある
に言及してるとは思えないですけど。

>>71には同意するけど、やはり通常の使い方ではOracle
の書式の方が分かりやすい。
JOINを使うと、>>463のようにぐちゃぐちゃになりがち
この点、>>463はわざわざ悪例を出してくれたといえる。
0470テストには間に合わなかったなNGNG
>>1
忙しいあなたのためのSQL入門
http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20011226/1/
0471デフォルトの名無しさんNGNG
>463
っていうか、朝一から
OUTERだとかINNNERだとか考えてるんっすか?
そんなに時間があるなら自分でお調べになった方がはやいのでは?
0472ヤンNGNG
やっぱりSQLだけを覚えてても意味はないのですか?例えばJAVAなんかも覚えるとして、
そっちの言語もプロレベルまで覚えなきゃいけないのですか?それともある一定の、レベル
ぐらいでよいのでしょうか?
0473デフォルトの名無しさんNGNG
SQL だけ覚えてもそれを使う言語知らなきゃ意味ないと思われ
それともDBのチューニング一筋で生きてゆく?
0474デフォルトの名無しさんNGNG
>>464
定義関数使う方が圧倒的に遅いと思うよ。
定義関数も結局はスカラサブクエリということになるからね。

定義関数を書き下すと
Select
(Select FIELD_NAME From MASTER_TABLE Where CODE = ...)
From ...
になるわけでしょ?
つまり、レコードの数だけ (Select FIELD_NAME ...) を評価しないと
いけなくなる。この Select句に埋め込まれた(Select FIELD_NAME ...)を
スカラサブクエリと呼ぶんだけど、これはパフォーマンスを落とす顕著な
パターンなんだ。覚えておくといいよ。

0475デフォルトの名無しさんNGNG
>>472
むしろ、プログラミング言語を深く学んだ方が良い。
アプリケーションエンジニアにとってもデータベースはできて当然という
方向になりつつあると思う。
データベースの取り扱いが格段に容易になってきたからね。
0476デフォルトの名無しさんNGNG
>475
>>アプリケーションエンジニアにとってもデータベースはできて当然という方向になりつつあると思う。
それは言えてる

ただ複雑なSQLを書けることによって
信じられないくらい簡単にプログラムを書くことが出来るように
なる場合がある。
0477デフォルトの名無しさんNGNG
教えてください
Delphiで設定はわかるのですが、SQL文の書き方はわかりません
たとえばただ単にbeginとendの間に
 select〜
  From〜
を指定すると思うのですが、それだけでは当然エラーが出てしまいます。
それ以前のDelphiにSQLを使うという宣言が必要だと思いますが、それがわかりません
どうぞ教えてください。
0478デフォルトの名無しさんNGNG
>>477
Delphiのコードに直接書くのではなくて、
TQuery 等の SQLプロパティに書いておきます。
プログラムの中で記述するには
Query1.SQL.Add('Select * from A');
みたいな感じで書くか、SQLを書いたテキストファイルを
Query1.SQL.LoadFromFile('TEST.SQL');
などとして読み込んでおきます。
実行はQuery1.ExecSQL;です。

つーか、サンプル見てね。
0479デフォルトの名無しさんNGNG
>>476
そうだね。データベース(SQL)を「引き出し」としか思っていなくて
プログラミング言語でなんでもかんでもロジックを実装してしまう
アプリケーションエンジニアが多いのも事実だね。
(レコードの単純な出し入れしかしない人だよ)

データベース(SQL)が処理系だということに気が付くと、
アプリケーションエンジニアとして、ひとつステップアップしたと
いえるんじゃないかな。(ストアドや高度な結合を使いこなせて、
処理系としてのデータベースを利用できる人だよ)
0480464NGNG
>474
返事ありがとうございます。
圧倒的に遅いとのこと。なるほど
>Select
>(Select FIELD_NAME From MASTER_TABLE Where CODE = ...)
>From ...
と提示して頂けて問題なく理解できました。
となるとユーザー定義関数ってのは、
文字列操作や、そういったDBと絡まない
SQLにおいてのみ利用価値がある、
という認識でいいのでしょうかね。
CASE WHENやCONVERTってどうしても
SQLが煩雑になっちゃうからできれば
使いたいところです。

ありがとう。
0481デフォルトの名無しさんNGNG
>>480
ようは使い方だな。定義関数を使うと構造化できてクエリ全体を
見やすくできるから、使い方によっては非常に便利だ。
書き下したときに、どんなクエリになるか考えながら使えばいいと思うよ。
0482デフォルトの名無しさんNGNG
>464
特殊な例だったのかも知れませんが
トランザクションテーブルに名称を持たした事があるよ
0483デフォルトの名無しさんNGNG
教えてください
Delphiで下記のように設定しても、表示はされるがSQLとしては何もおこりません
どこか間違っているのでしょうか?

begin
Database1.AliasName := 'ABC; // ODBCのデータソース名
Database1.DatabaseName := 'Aテーブル'; // DBのエイリアス
Database1.LoginPrompt := False; // DBのログインダイアログを抑制

Table1.DatabaseName := 'Aテーブル';
Table1.TableName := 'Aテーブル'; // MDB内に作ったテーブル名称

DataSource1.DataSet := Table1; // TTableコンポーネントを指定
DBGrid1.DataSource := DataSource1; // TDataSourceコンポーネントを指定
Query1.DataSource := DataSource1;

Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM Aテーブル');
Query1.SQL.Add('ORDER BY タイトル DESC');

Database1.Open;
Table1.Open;
Query1.Open;
end;
0484デフォルトの名無しさんNGNG
>483
Delphiでいけ!
0485デフォルトの名無しさんNGNG
>>483
何をやりたいのかよくわからないんだけど、Query1の結果を表示したいだけなら
Table1 はいらないと思う。
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
でいーんじゃない?
ま、Delphiスレで聞いたほうがいいでしょうsage
0486デフォルトの名無しさんNGNG
初心者です。教えてください
例えば
Query1.SQL.Add('ORDER BY ID DESC');  並び替え
Query1.SQL.Add('DELETE FROM テーブル');  削除
みたいにSQL文で一つのクエリーに2つの命令って出来ますか?
0487デフォルトの名無しさんNGNG
>486
何を聞きたいのかいまいち分からないが
ストアド使うのが一般的かな?
0488太郎NGNG
Postgresでランダムにレコードをとりだすことってできないんすか?
今、いったん、件数を数えてから、perlとかのrand関数つかってやってます。
Count()とrandom()あたりをつかうのかなぁ?
わかるかた、教えてくださいませ。
0489デフォルトの名無しさんNGNG
>488
ランダムで取り出すって意図が分からないですが
適当に取り出すって意味なら
ORDER BYをかげずに、取り出せば取得すれば良いんじゃないの?

だからPostgresならLIMITとOFFSETで出来ないのか?
0490太郎NGNG
select * from テーブル limit 1 offset 0;
とかしても、きっと、一番最新のデータがとりだされるだけでした。
0491デフォルトの名無しさんNGNG
>490
だからランダムちゅー意図をハッキリせいって
たまたま最新レコードが最初にヒットししてるんじゃ?

limitの位置をずらせばランダムになるやんか
っと思うんだけど?
0492デフォルトの名無しさんNGNG
並び替えの時に
Query1.SQL.Add('FROM AAA,BBB,CCC');
Query1.SQL.Add('WHERE AAA.ID = BBB.項目1');
Query1.SQL.Add('AND CCC.ID = BBB.項目2');
Query1.SQL.Add('AND …');

の後にORDER BY ID DESCを挿入すると思うのですが
普通に入れたらエラー(句にある複数のDテーブルを参照…)になってしまいます。
教えてください
0493デフォルトの名無しさんNGNG
>>492
そりゃそうだろ。AAA.ID なのか CCC.ID なのか明示しなきゃ。
0494デフォルトの名無しさんNGNG
>492
デルファイのコードで書くなちゅーの
ここで質問するならSQLだけで説明して欲しいわ
0495デフォルトの名無しさんNGNG
>>493
例えば
ORDER BY AAA.ID DESCですか?
0496デフォルトの名無しさんNGNG
オラクルのPL/SQLについて質問なのですが、
Postgreみたいにカーソルの明示的な移動って出来ないのでしょうか
1row前に戻るとか。
0497496NGNG
↑ちなみに8iですー
0498デフォルトの名無しさんNGNG
>496
FETCHしか無いから出来ないちゃうか?
ちゅーかカーソルの明示的な移動って、
どういう使い方をするときに必要なのだ?
0499496NGNG
>>498
カーソルを返すストアドファンクションで、
中で%NOTFOUNDまでループさせた場合、
その後にカーソルをreturnするとエラーになっちゃうんです。
%NOTFOUNDの手前でとめればOKなんですけど。
0500496NGNG
そんで手前で止める為に予め件数を取得してないとならないのが
面倒なので、なんとかカーソル動かせないかなぁと思ったのです。
0501デフォルトの名無しさんNGNG
このスレって元々は単発質問スレ?
糞スレリサイクル大成功?
0502デフォルトの名無しさんNGNG
>499
FETCHする前に変数に、変数に入れておけば良いんじゃない?
そしたら最後のレコードを取得できるんちゃう
0503デフォルトの名無しさんNGNG
>>499
例外処理で返すのは反則?
0504デフォルトの名無しさんNGNG
「日付が最も大きいもののデータを抽出する」
という処理はどうやりますか?
0505496=499NGNG
当方まだPL/SQLを始めて3日目なもので、
的はずれなこと言ってたらごめんなさい。

>>502
フェッチ前にカーソルの中身を%ROWTYPEの変数に渡す
ということでしょうか?

>>503
例外を返すのもやっぱりカーソルじゃないとならないから、
難しいのではないでしょうか。。。
0506504NGNG
自己レスなんだけど

SELECT * FROM テーブル名 GROUP BY id
HAVING MAX(date1)=MAX(date1)

こんな感じでいいかね?
0507デフォルトの名無しさんNGNG
>504 日付降順に並べて1つフェッチしたら?
0508504NGNG
506のやり方は駄目でした。

>>507
実はSELECTではなくUPDATEをしたいのですが、
出来れば一回のSQLで抽出したいので、
WHERE区のなかで「日付フィールドが最大のもの」と
指定できればと思うんだけど。
ちなみにMYSQLなのでサブクエリーは使えないんです。

0509デフォルトの名無しさんNGNG
>>508
「日付フィールドが最大のもの」という言葉だけでは
"GROUP BY id" なんていう条件は予想もつかない。

説明を略しすぎてない?
0510504NGNG
>>509
フィールドの構成は
id,date1
となっていて、idはユニークではなく重複がありえる。
date1は日付です。

例えば
id,date1
tanaka,2002-01-01
tanaka,2002-02-01
suzuki,2002-01-01
yamamoto,2002-01-01
yamamoto,2002-02-01
yamamoto,2002-03-01

・・・こんな感じになってます。
0511504NGNG
で、指定したIDの日付が最大のものを更新したいのです。
例えば、idが'yamamoto'でdate1が最大のもののdate1を更新したいのです。
説明不足で申し訳ない。
0512502NGNG
>505
そのとおり


>504
基本中の基本だ。MAXあたりを調べな
0513デフォルトの名無しさんNGNG
Oracle のシーケンスを何箇所かで使っているアプリケーションを作ったんだけど、
シーケンスがないデータベースへ移植するための簡単な方法はないですか?
SQL は外部定義になっているので SQL レベルで対応できればサイコーです。

思い付く方法といえば、ストアド作るか、シーケンス用のテーブル作って
SELECT 〜 FOR UPDATE, UPDATE 〜 しかないです。どちらもコードの修正が必要
になっちゃいます。
0514デフォルトの名無しさんNGNG
>513
トリガーでやる
0515 NGNG
>>504-511
>指定したIDの日付が最大のものを更新したいのです
select文は簡単だが、
副問い合わせができないと、
update文はきついな。
しかし、できないというわけではない

MySQLはANSI92だったな
テーブル名をtable1とすると、
update table1
set date1 = '2002-02-28'
FROM table1
LEFT OUTER JOIN table1 a ON (table1.id=a.id and a.date1 > table1.date1)
where
a.id1 is null and
table1.id = 'yamamoto'
0516515NGNG
>>515
>select文は簡単だが
スマソ
副問い合わせができないと
selectもきついな
でも、515のようにすればできる。
SELECT a.*
FROM table1 a
LEFT OUTER JOIN table1 b ON (a.id=b.id and b.date1 > a.date1)
where
b.id1 is null and
a.id = 'yamamoto'
0517504ではないがNGNG
>>516
すげえ。
半信半疑で実行して見たら本当にできたよ。
MySQLでこんなことできるとは知らなかった……。
0518515NGNG
>>517
本当はnot exists文が使えると
分かりやすいんだが。
あと
>>515-516
の両方のレスで
where句の
b.id1 is null and
は
b.id is null and
の間違い(コピペ修正ミス)
ゴミン
0519517NGNG
>>518
でも>>515はできなかったよ。
ANSI92 では UPDATE で FROM って使えるの?

0520デフォルトの名無しさんNGNG
ANSIが、これほど頼りない言語も無いな。
かなり基本的な構文まで異なってる。
0521515NGNG
>>519
うっ!
スマソ、折れSQLSeverで試してた、
updateのfrom句はT-SQL専用だった。
(Oraもできないね)
ガセ言っちまった、ホントにゴミン。
逝ってくる・・・くしょぉ!
0522504NGNG
>>515
すばらしいです。SELECTの方はできるんですねー。
カナーリ勉強になりました。どうもです。
UPDATEの方は引き続き勉強してみます。
ちなみにSELECTの方は>>111の質問とかぶってるみたいでしたね。
0523504NGNG
もう一言。はやくMySQLは副問い合わせ対応にせれよ。
0524デフォルトの名無しさんNGNG
>>523
 それは同意することにやぶさかではないが、とりあえず今回の場合は、
すなおに MAX DATE を取る SELECT を投げて、
その結果使って UPDATE
の二度手間でいいじゃん、と思うのはいけないことだろうか?

その方がわかりやすくていいじゃん。
無理に一つに書く必要がないなら。
0525517NGNG
>>524 同意。
ほんとうにあれだけのカラムしかないテーブルなら、yamamoto の最新日付は

SELECT MAX(date1) FROM table1 WHERE id='yamamoto' GROUP BY id;

でとれるよね。まあカラムはあれだけじゃないと思うけど。

本当にあれだけで、MAX(date1)をいちいち更新する作りなら、
どういうつもりで設計したのか小一時間(以下略)
0526デフォルトの名無しさんNGNG
まだSQLをコードに埋め込んでるやつらいるのかよ・・・鬱
0527デフォルトの名無しさんNGNG
>>526
私は Oracle+ACCESS で情報系システムを作っていますが、よろしければ
SQLをコードに埋め込まない方法について教えてください。
今は、もろに埋め込んでいますが、より良い方法があれば知りたいのです。
0528デフォルトの名無しさんNGNG
WOなら、SQL一切書かずにJDBC接続できますね。
0529デフォルトの名無しさんNGNG
>>528 ヤパーリWOの宣伝か。そんなことだろうとオモタヨ。
そのWOとやらがフリーでオープンソースで劇軽なら導入を検討させて頂きます。
0530デフォルトの名無しさんNGNG
>>529
どうせ使いこなせないと思うから、検討する必要すらないよ。
完全なる畑違い。
Perl/PHP/Ruby + PostgreSQL/MySQLでも使えば?
0531デフォルトの名無しさんNGNG
oracle8iなのですが
DB表をカーソルからフェッチして、それをPL/SQL表に入れて
さらにそれを別のカーソルでオープンする、ということは可能でしょうか?

また、PL/SQL表のポインタを返すようなストアド関数は作成可能でしょうか?

宜しくお願いいたします。
0532デフォルトの名無しさんNGNG
文字列結合の演算子||ってSQL92の標準規格だと思っているのですが違うのでしょうか?
SQL92の標準SQLについての解説しているようなページはないでしょうか?
どなたかご存知でしたら教えて下さい。
0533デフォルトの名無しさんNGNG
>>531
質問の答えとは全然違うので申し訳ないのですが・・・
最初のSQLを副SQLにして、次のSQLのFROM句にすることで解決できませんか。
0534デフォルトの名無しさんNGNG
>>533
ありがとうございます。
ですが、ちょっとそれが難しいんです。

やりたいことは、戻り値がカーソルであるストアド関数で

1.引数が0のとき :DB表をSELECT → カーソルでOPENし、
そのままRETURNする
2.引数が1以上のとき:DB表をSELECTし、そのリザルトの中で
「引数番目に出現した行のみ」をカーソルでRETURNしたい

なのですが、2ができなくて困っています。
global temporary tableを使えば可能ですが、
createはするなと言われてしまっています。。。。
0535デフォルトの名無しさんNGNG
↑つづき
カーソルでなくても、何か他のものでRETURNできれば良いのですが
1と2で戻り値が異なってはいけない、とも言われているので・・・。

宜しくお願いします。
0536デフォルトの名無しさんNGNG
↑訂正
戻り値 ×
戻り値の型 ○
0537デフォルトの名無しさんNGNG
質問です。

Postgresでdatetime型の値を扱うのですが、
YYYY/MM/DDへのフォーマットはどうすればいいのでしょうか?

オラクルではto_charやto_dateなどを使用していたもので。。。

宜しくお願いします。
0538デフォルトの名無しさんNGNG
>>534
>「引数番目に出現した行のみ」をカーソルでRETURNしたい
「のみ」なんだろ?
別にPL/SQL表にいれなくてむ、引数番目までそのカーソルをフェッチ
して返せば問題ないんでないの?

#つーかカーソルを戻り値として使う事なんてできるんだ。知らんかった。
#カーソルの閉じ忘れが怖そうだなぁ。

0539534NGNG
>>538
いえいえ、そうすると、「n番目から最後まで」の
行を返すことになっちゃうんですよね。カーソルってポインタだから・・・。

#呼び出しはJAVAでやってるから、
#そっちで対応すればいいのになぁ。。
0540デフォルトの名無しさんNGNG
トランザクトSQL
DB2のコマンドセンター
AS/400の対話型SQLも
オラクルはNTでフリーソフトの画面からSQL文叩いてたよ。
(昔なのでウル覚え)

ほとんどおなじだね。データ型が少し違うくらいだな。
元祖はIBMなん?
0541538NGNG
>>539
亀レススマソ。
ちょっと言葉足らずだったけど、フェッチした後変数に入れて返せばいいのに
と思って書いたんだけど・・・あくまで戻り値は「カーソル」なのね。
だったら、フェッチした行がユニークになる条件で、関数内でカーソルを
オープンしてそれを戻り値にすれば?
でも、それだとカーソルを閉じるタイミングが難しいねぇ。
0542デフォルトの名無しさんNGNG
>>540
s/ウル覚え/うろ覚え/
0543デフォルトの名無しさんNGNG
>>537
>Postgresでdatetime型の値を扱うのですが、
>YYYY/MM/DDへのフォーマットはどうすればいいのでしょうか?
>
>オラクルではto_charやto_dateなどを使用していたもので。。。

同名の関数があります。
書式指定文字列はちょっと違うはずなので、
その辺はドキュメントみてちょ。
0544デフォルトの名無しさんNGNG
PL/SQLで質問です。
date型をGMT通算秒で表示したいのですがどうすればいいんでしょう?
0545578NGNG
「通算秒」という概念が良く分からんが、NEW_TIMEっていう関数を
使えばGMTに変換は可能だぞ
■ このスレッドは過去ログ倉庫に格納されています