Oracle 質問総合スレ3

このエントリーをはてなブックマークに追加
943NAME IS NULL:2009/07/29(水) 21:03:16 ID:???
>>941
パースや実行計画のコストが無視できないような短時間で終了するクエリでならば明らかだが、
複雑で時間のかかるクエリではそうとも限らん。特にデータに偏りがある場合などは。
944NAME IS NULL:2009/07/29(水) 21:13:57 ID:???
動的SQLとか使うのは頭が悪い奴
945NAME IS NULL:2009/07/29(水) 21:48:41 ID:???
頭が良い奴は両方の得失を理解して使い分けができる
946NAME IS NULL:2009/07/29(水) 21:53:06 ID:???
得失がわかってない奴が偉そうにいったところでねぇ
947NAME IS NULL:2009/07/29(水) 21:56:27 ID:???
分かっている方説明ヨロ

俺は分からん・・・
948NAME IS NULL:2009/07/29(水) 22:14:44 ID:???
単純な話、条件によって最適なアクセスプランが異なるようなケースでは
その都度実行計画を作る方がトータルのコストが低い場合がある。
オプティマイズをミスった場合のペナルティは場合によっては非常に
大きいから、あたりまえといえばあたりまえ。
949NAME IS NULL:2009/07/30(木) 07:30:02 ID:???
10gR2でも/*+ RULE */ヒント文は有効なので、
動的SQLに埋め込んでルールベースで動かす、
というのも、オプティマイズをミスった場合のペナルティから
回避する方法の一つ。

俺の経験では、コストベースオプティマイザに任せた結果、
大規模な表同士のジョインでハッシュジョインが
選択された時に一時表領域を食い尽くして、
尋常じゃないレベルまで性能低下するケースがあった。

ちなみに/*+ RULE */ヒント文を埋め込むと、
ソートマージジョインか、ネステッドループジョインの
どちらかになります。
950NAME IS NULL:2009/07/30(木) 08:32:36 ID:???
>>944
「俺が設計したファッキンテーブルじゃねえよ糞ったれ」
という事もあるかも知れん。

>>946
部屋にエアコンなくてイラついてんのか?
951NAME IS NULL:2009/07/30(木) 20:36:56 ID:???
得失が分かってない奴キタコレ↑
952NAME IS NULL:2009/07/31(金) 02:18:47 ID:???
すみません質問です。

今、Microsoft Office InfoPath 2007を使っているのですが、
Oracleに接続してDBの値を使えるらしいのです。
(DBから取得した値をテキストフォームに挿入ということがやりたいです。)

ですが、肝心のOracleへの接続方法が分かりません。

スレ違いかもしれませんが知っている方がいらっしゃいましたら
教えて頂けないでしょうか。
953NAME IS NULL:2009/07/31(金) 06:42:43 ID:???
oo4oでORACLE接続するVBAソースを持ってるけど、
著作権者が会社だから公開できないや・・・

ttp://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_2.html
とりあえず、上記を参考にExcelでの接続を体験して、
自分なりに改造してVBAの書き方を理解してから、
InfoPathに移植した方が良いのではないかと思います。

Oracle接続するExcelファイルは、テストツールとしても
有効活用できますから。
954NAME IS NULL:2009/07/31(金) 07:25:48 ID:???
>>963
ありがとうございます。

以前にVBAでのORACLEの接続経験はあるのですが、
InfoPath2007はVSTAを使ってC#orVB(今回はC#を使おうと思ってます)
で記述する感じでした。

試しにC#でそれらしい記述を書いてみたのですが、usingでOracle接続に必要な
クラスをインポートした所、エラーになり、どんな設定をすれば使えるように「なるのか
が分からないというのが今の状態です。

プログラムを書かないで接続する方法があればそちらで接続したいのです(SQL Server
とかはInfoPathの設定で接続できるみたいです)。
ですがOracleは今の所の調べではそういう設定は無さそうでした...
955NAME IS NULL:2009/07/31(金) 18:37:36 ID:???
InfoPath2007は、VBA使えないのかな?
VBAの後継は、
Microsoft Visual Studio 2005 Tools for Applications (VSTA)って言うんだね。

ORACLE社からは11gに関連して
ttp://www.oracle.com/technology/global/jp/tech/dotnet/doc/odt11_whatsnew.pdf
にWord/Excelに関する記述、Microsoft Visual Studio Tools for Office(VSTO)
の記載があるけど

ttp://blogs.msdn.com/hiroyask/archive/2006/02/06/525336.aspx
によると、VSTOとVSTAとは同じじゃないんだね。

いやぁ。勉強になった。
Excel2007を互換モードで使ってるオイラ(VBA利用者)は化石になるね。
956952:2009/07/31(金) 21:12:33 ID:???
InfoPath2007とOracle接続の件ですが今日解決することができました。

必要なライブラリ(?)を"参照の追加"で追加しないとOracele接続クラスの
メソッドが使えなかったみたいです。

Officeはそこまで使わないので設定の流れが分からなくて...面目ないです。

しかしC#はライブラリが充実していて結構使い易いですね〜

以上お騒がせ致しました。
957NAME IS NULL:2009/07/31(金) 22:00:09 ID:???
ORACLEってダウンロードできますか?
958NAME IS NULL:2009/07/31(金) 22:34:05 ID:???
できますん
959NAME IS NULL:2009/08/01(土) 04:10:55 ID:4qRkq2W/
質問です。
Oracle 9iとPro cobolを使っています。

条件にマッチする行が15件有る場合、
以下のようなプログラムを実行すると、

EXEC SQL
 BEGIN DECLARE SECTION
END-EXEC
01 Touroku-REC-TABLES
  05 ht-id PIC X(12) OCCURS 25.
  05 ht-name PIC X(40) OCCURS 25.
EXEC SQL
  END DECLARE SECTION
END-EXEC.
.
.
.

EXEC SQL
 SELECT id, name
  INTO :ht-id, :Ht-name FROM touroku
END-EXEC

一度に15件取得して、配列に代入する事になるんですか?
それとも、一件のみの取得ですか?
いままでは、複数件取得したい場合
カーソルを作ってNOTFOUNDが出るまで、
一件取得->配列に代入のループを行っていたので
今日初めてこのプログラムを見て、
一件取得なのか、全部取得なのかどっちか疑問に思っています
960NAME IS NULL:2009/08/01(土) 16:59:51 ID:???
俺は、Pro*COBOLを使った事無いけど、PL/SQLでは、
ttp://www.shift-the-oracle.com/plsql/select.html
に書かれているような、実行時のエラーを経験している。
-------------------------------------------------
ORA-01422: 完全フェッチがリクエストよりも多くの行を戻しました
-------------------------------------------------

多分、同じ事になるんではないか。
961NAME IS NULL:2009/08/03(月) 23:13:01 ID:???
ここでいいのか分からないけど質問です。
Oracle10gとWindowsCE5.0って直接SQLのやり取りって出来ない?
どうも、WindowsCE5.0用のオラクルクライアントが無いようなのですが。
直接SQLでやり取り出来る方法があれば教えてください。

環境
・PDA(WindowsCE5.0)
・.NetCompactFramework2.0
・VB.net(VS2005)
962NAME IS NULL:2009/08/04(火) 16:50:28 ID:???
データベース未経験でわからないので根本的なことですが教えてください。

oracleってどういった業務に使われてるんですか?
963NAME IS NULL:2009/08/04(火) 16:52:24 ID:n7ZF7BFv
自分が所有しているCDをアーチストごとに分類したりするのに良く使われるな
964NAME IS NULL:2009/08/04(火) 17:21:36 ID:WF6K2+ix
Oracle10g R1 は
Mac OS X Tiger(PPC)で動くらしいのですが
LeopardはPPCとIntelの両方で動くのでしょうか

R2はIntel Mac版があるようなのですが・・・
965NAME IS NULL:2009/08/04(火) 20:46:17 ID:???
>>961
CE用のクライアントは聞いたことないね。
ミドルウェアを買う必要あるんじゃないかな。


>>962
CRM(カスタマーリレーションシップマネジメント)
SCM(サプライチェーンマネジメント)
SFA(セールスフォースオートメーション)
ERP(エンタープライズリソースプランニング)
KM(ナレッジマネジメント)
などです。
966NAME IS NULL:2009/08/04(火) 23:47:42 ID:???
967NAME IS NULL:2009/08/05(水) 01:36:05 ID:???
よく分からないがOracleLiteClientってOracleLiteServer専用とかじゃない?

Javaが使えるなら確かJDBCのThinドライバでクライアントの
インストールなしにサーバに接続できた気がする。
968NAME IS NULL:2009/08/05(水) 07:50:03 ID:???
Windows Mobileは、1週間に1回ぐらいフリーズして、ため息。
3ヶ月に1回ぐらい、知らぬうちに工場出荷状態に戻ってて、激怒。
調子が悪くて自分でハードリセットする羽目になって、涙目。

Windows Mobileという製品を十分評価してからの方がいいよ。
969NAME IS NULL:2009/08/05(水) 11:49:38 ID:lbXkSQVv
ODBC接続のとき、Oracleのドライバーを使用すると
ユーザー名が全角10文字より長い場合エラーになるのですが
仕様ですか?
970NAME IS NULL:2009/08/05(水) 19:49:58 ID:???
ユーザー名が全角文字って初めて聞きました。
このスレ住民には、そのような使い方してる人は、
いないと思います。

普通は半角英数字とアンダースコア(A-Z、0-9、_)
だけ使って、先頭はアルファベットで、
30バイト以内でユーザー名を設定しますよ。
TARO_YAMADA
GREATSYSTEM360
のような感じですね。

ちなみに、全角10文字より長いとエラーが発生する
というのは、UTF-8では日本語は3バイトなので
30バイト制限に引っかかっているのかもしれません。
971NAME IS NULL:2009/08/06(木) 07:46:30 ID:???
長文失礼します。
10gR2のキャラクタセットがJA16SJISTILDEの現行インスタンスを
10gR2のキャラクタセットがAL32UTF8の新インスタンスとして再構成したいです。
なお、現行のクライアントアプリは、入力バイト数の制限チェックを
SJIS想定で判定しております。

今、自分で考えている方針としては、以下の1〜5です。
とりあえず自分なりに1回経験を積むつもりですが、
経験談、指摘事項があればアドバイスをいただきたいです。
当初はORACLE社推奨どおりCSSCANからCSALTERを使う事も
考えましたが、いまひとつ信頼しきれないと感じています。
よろしくお願いいたします。

1)
現行インスタンスで、全スキーマの全テーブルのデータ件数、
テーブル中の各カラムの格納バイト数を調査する。
CSSCANにより問題箇所の事前情報も得ておく。

2)
1で、全テーブルの全カラムの格納バイト数が
VARCHAR2(1333)以内に収まる、CHAR(666)以内に収まる
データであると判明したら、3以降に進む。
収まらないようなら、データ内容について
AL32UTF8にて4000バイトに収まりそうか十分に検討、
データを削るなどの作業をして、1に戻る。

3)
JA16SJISTILDEのインスタンスをエクスポート。
AL32UTF8のインスタンスにROWS=Nでインポート。
1〜2の情報を元に、
ALTER TABLE xxxx MODIFY (yyyy VARCHAR2(4000));
のようにテーブルの定義を変更する。

4)
AL32UTF8のインスタンスにIGNORE=Yオプションで
データをインポート
インポート後、1のデータ件数と比較し、レコードの
欠落が無いことを確認する。欠落があった場合、
TRUNCATE TABLE xxxx
ALTER TABLE xxxx MODIFYして、インポートしなおす。

5)
現行のクライアントアプリは、当面そのままとし、環境変数
NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE
のままで利用する。
キャラクタセットの変換はOracle Netに任せる。
性能低下が懸念されるため、性能低下度合いを確認する。
将来的には、環境変数
NLS_LANG=JAPANESE_JAPAN.UTF8
で動作するよう、
具体的にはハングルと日本語を同時に利用可能なように
クライアントアプリを修正する。
972NAME IS NULL:2009/08/06(木) 08:30:58 ID:???
>具体的にはハングルと日本語を同時に利用可能なように

民主党か?
売国奴は日本から出て行け。
973NAME IS NULL:2009/08/06(木) 09:20:08 ID:???
うちはマルチバイト系の文字を使うカラムは全部NCHAR系に変えて行ったな。
バイトで処理してるアプリの対応は必要だったが最終的にはすっきりした。
974NAME IS NULL:2009/08/06(木) 11:27:44 ID:???
データベース移行なんてしなくてもCHAR、VARCHAR2を
NCHAR、NVARCHAR2に定義変更すればいいんじゃない?
多分文字コードはUTF16で定義されてるだろうから、
クライアントの長さチェックの修正も必要ない。
975NAME IS NULL:2009/08/07(金) 00:34:30 ID:???
>>971
記憶でレスするので間違えてたらスマソ。
(3) の Import で SJIS→UTF8の変換が必要と判断され、
Import 時の CREATE TABLE でカラムサイズ1.5倍が動い
た気がする。なのでDDLを作り直したほうが良いかもしれない。

あと CSALTER でも SJIS→UTF8はスーパーセットじゃない
のでNGのはず。

ナショナル・キャラクタセットへの変換は、アプリによってはフェッ
チ時のAPI変えたりとか面倒なケースがあったような。
976NAME IS NULL:2009/08/07(金) 06:05:16 ID:???
>>972
私も同じ考えでしたから、偉そうに言えませんが
日本の企業が韓国、中国に進出するために
必要なんだそうです、上司いわく。

>>973-975
参考になりました。ありがとうございます。


さて、土日に自宅で頑張ってみます。
977NAME IS NULL:2009/08/14(金) 07:21:24 ID:???
やべえ。スレッドストッパーだ、オレ。
978NAME IS NULL:2009/08/19(水) 14:49:32 ID:???
11gのテーブルのダンプを9iにインポートすると、ORA-0096エラーがでます。

エクスポートは9iが稼働してるサーバから、
exp hoge/hage@11gSVR file=t.dmp
みたいな感じでエクスポートしました。

それを
9iが稼働してるサーバで
imp hoge/hage file=t.dmp full=y
みたいな感じでインポートすると

「ORA-00096: 無効な値がパラメータplsql_compiler_flagsに指定されて
います。値はNON_DEBUG, DEBUG, INTERPRETED, NATIVEの中から設定する
必要があります」

のエラーが出てしまいます。
この下向きのインポートは10gを経由しないとダメなんでしょうか。
979NAME IS NULL:2009/08/19(水) 17:51:33 ID:???
11g R1⇒9i R1はそもそもできないそうです
980NAME IS NULL:2009/08/19(水) 21:44:53 ID:???
>>978
書き込みを読んで、なにも調べずに想像だけど。
plsql〜のエラーってことはさ、PLSQLのコンパイルに失敗しているってことでしょ。
exp/impってさ、テーブルやらインデックスやらビューやら権限やらPLSQLやら
ありとあらゆるオブジェクトが対象になっているのね。fullでやると。

んで、今回の11gから9iがテーブルのデータだけで良いってんなら。
fullやめて、tablesパラメータでテーブル全部指定してテーブルだけ
インデックスもほしいならindexes=yで、データだけ入れれば?
んで、さらに、途中でエラーが発生してもエラー停止しないって引数
が(名前忘れた)あるからそれもyでつける。

これでデータだけならできんじゃね?
981NAME IS NULL:2009/08/20(木) 09:21:14 ID:???
>>979
>>980

お返事ありがとうございます。
imp hoge/hage file=t.dmp tables=table1 ignore=y
でやってみましたが現象変わらずでした。

10g R2(?)以降はimp/expコマンドは正式サポートされていないようですし、
この関係で11g->9iのデータ移行は簡単にいかないのでしょうかね。

データだけで良いので、CSV経由ででも試してみます。
982NAME IS NULL:2009/08/21(金) 00:02:08 ID:???
>>981
CSV経由するくらいなら、DATABASE Link接続でInsert Selectは?
983NAME IS NULL:2009/08/21(金) 00:03:48 ID:???
LOBでトラブる
984NAME IS NULL:2009/08/21(金) 09:56:58 ID:???
>>982
DATABSASE Linkは使ったこと無かったのですが、後学のために試して
みたいと思います。ありがとうございました。
985NAME IS NULL:2009/08/21(金) 13:45:03 ID:???
おいらにとっちゃデジタルの方がどうにでもできる
986NAME IS NULL:2009/08/21(金) 22:43:27 ID:???
Oracleの9iで巨大なテーブルデータをロード、アンロードしたいんだけど、
一般的にどんな方法とるの
987986:2009/08/21(金) 22:46:52 ID:???
ごめんなさい、途中でエンター押してしまった。

Oracleの9iで巨大なテーブルデータをロード、アンロードしたいんだけど、
一般的にどんな方法とるの?
今は、普通にPro*CからSELECT * FROM・・ってしてデータ取得して
全件とってきてるんだけど、一時表領域がパンクしてエラーになってる。
巨大テーブルの全件アンロードとロードって結構やりそうだと思うんだけど
これだっていう一般的な方法がぐぐっても見つからんかった。
988NAME IS NULL:2009/08/21(金) 22:57:35 ID:???
9iまでならimp/exp (以降ならimpdp/expdp)
ロード時、アーカイブログはオフる
989NAME IS NULL:2009/08/21(金) 23:11:23 ID:???
>>988
サンクス、確かにそれが普通っぽい気がする。
逆になんでそんな実装をしているんだとおもいます?
やっぱり、やっぱりロード時にオフる必要があるからでしょうか?
普通にテーブルの全データ取ってきてるだけなのに。
実装が不自然すぎて逆に意図があるんじゃないかと思ってしまう。
990NAME IS NULL:2009/08/21(金) 23:15:19 ID:???
質問ばっかりウザい
一つ答えてもらったんだから自分でなんとかしろよ
991NAME IS NULL:2009/08/21(金) 23:18:23 ID:???
別に質問してるわけじゃないし。
それに質問だとしても質問スレなんだから何か問題あるでしょうか?
992NAME IS NULL
>>989
変な実装だと思った時は、素直にそう思った方がよい
(実際、無知から来る妙な実装を結構見てるから)