Más contenido relacionado
La actualidad más candente (18)
Similar a 本当にあった怖い話し Db編 (20)
本当にあった怖い話し Db編
- 7. ODP.NET 4 がシステム要件を満たしている
のに動かない
実行環境
Windows XP SP3
.NET Framework 4 Client Profile
.NET 2系は未インストール
ODP.NET 4
標準の Widows Update は適用済み
.NET 3.5 SP1 は除く
例外発生!!
- 8. using System;
using Oracle.DataAccess.Client;
class Program {
static void Main(string[] args) {
try {
Console.WriteLine(typeof(string).Assembly.FullName);
Console.WriteLine(typeof(OracleConnection).Assembly.FullName);
var connStr = “~";
using (var conn = new OracleConnection(connStr))
using (var cmd = new OracleCommand(@"select SYSDATE from dual", conn)) {
conn.Open();
Console.WriteLine(cmd.ExecuteScalar());
}
} catch (Exception e) {
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
Console.ReadKey();
}
}
- 9. using System;
using Oracle.DataAccess.Client;
class Program {
static void Main(string[] args) {
try {
Console.WriteLine(typeof(string).Assembly.FullName);
例外発生!
Console.WriteLine(typeof(OracleConnection).Assembly.FullName);
var connStr = “~";
using (var conn = new OracleConnection(connStr))
using (var cmd = new OracleCommand(@"select SYSDATE from dual", conn)) {
--------------------------------------------------------------------------------
conn.Open();
mscorelib, Version=4.0.0.0, ...
Console.WriteLine(cmd.ExecuteScalar());
Oracle.DataAccess, Version=4.112.3.0, ...
}
'Oracle.DataAccess.Client.OracleConnection' type iniitalize
} catch (Exception e) {
Console.WriteLine(e.Message);
error ....
Console.WriteLine(e.StackTrace);
--------------------------------------------------------------------------------
}
Console.ReadKey();
}
}
- 10. ODP.NET 4 がシステム要件を満たしている
のに動かない
回避策 (どれか一つでOK)
Windows Update から .NET 3.5 SP1 をイン
ストール
C++ の再頒布可能パッケージ をインストー
ル
http://www.microsoft.com/ja-jp/download/details.aspx?id=5638
OTN Discussion Forums
ODP.NET4 required .NET2.0?
https://forums.oracle.com/forums/thread.jspa?thr
eadID=2423728&stqc=true
- 12. create table TEST (
PK number(3,0) not null primary key,
CONTENT1 varchar2(4000),
CONTENT2 varchar2(4000),
CONTENT3 varchar2(4000)
)
/
insert into TEST values (:PK, :CONTENT1, :CONTENT2, :CONTENT3)
/
drop table TEST
/
結果 CONTENT1 CONTENT2 CONTENT3
NG 4000文字 4000文字 4000文字
NG 2000文字 2000文字 0文字
OK 1999文字 2000文字 1999文字
OK 1999文字 4000文字 1999文字
- 14. create table TEST (
PK number(3,0) not null primary key,
CONTENT1 varchar2(4000),
CONTENT2 varchar2(4000),
CONTENT3 varchar2(4000)
)
/
insert into TEST values (
:PK,
:CONTENT1_1 || :CONTENT1_2 || :CONTENT1_3 || :CONTENT1_4,
:CONTENT2_1 || :CONTENT2_2 || :CONTENT2_3 || :CONTENT2_4,
:CONTENT3_1 || :CONTENT3_2 || :CONTENT3_3 || :CONTENT3_4
)
/
drop table TEST
/
- 21. サンプルクエリの説明
FOO テーブル
マスタテーブル
BAR_FUNC
FOO.HOGE_KBN が ‘1’ はエラー発生
FOO.HOGE_KBN が ‘2’ はエラーなし
ZOO_PROCEDURE
FOO、BAR_FUNC を参照
トランザクションテーブルを更新
FOO テーブルは更新しない
- 22. FOO テーブルのデータ BAR_FUNC との関係
HOGE_KBN
‘1’ エラー
‘2’ エラーなし
BAR_FUNC では検証用に
RAISE_APPLICATION_ERROR
を使ってエラーを発生させている
- 23. -- FOO.HOGE_KBN = ‘1’ はエラー発生、’2’ はエラー発生せず
update FOO set HOGE_KBN = '1'
/
commit
/
select BAR_FUNC(~) from dual -- FOO.HOGE_KBN = ‘1’ なのでエラー発生
/
update FOO set HOGE_KBN = '2'
/
select BAR_FUNC(~) from dual -- FOO.HOGE_KBN = ‘2’ なのでエラー発生せず
/
rollback
/
call ZOO_PROCEDURE (~) -- FOO.HOGE_KBN = ‘1’ なのでエラー発生
/
update FOO set HOGE_KBN = '2'
/
call ZOO_PROCEDURE (~) -- FOO.HOGE_KBN = ‘2’ なのにエラー発生!!
/