質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

3回答

1064閲覧

DBの数字項目に文字を入れるとNullがはいってしまう。

Kiri_Tanpo

総合スコア13

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/03/26 00:03

前提・実現したいこと

OracleDBテーブルのNumber型のカラムに文字を入れた際に、
エラーとなるようにしたい。

発生している問題・エラーメッセージ

Number型に文字を入れるとエラーにならず、
Nullが入ってしまい、正常動作を行ってしまう。

OracleDB、もしくはADODBの仕様の可能性も示唆しているのですが、
ソースコードが必要であれば追記します。
どうぞよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

Windows7
OracleDB 11g
ADODB
VBScript
Batch

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/03/26 00:18

現象を再現できる必要最小限のCREATE TABLEとコードを提示するのが掲示板でのマナーです。
sazi

2018/03/26 01:33 編集

ソースコードも必要ですね (よく見たら、被ったコメントでした)
sazi

2018/03/26 04:36 編集

普通、例外が発生すると中断しますが、正常終了するってことは例外をスルーしているとかないですか?多分そこはvbScriptでの話になるので、コードで何やってるかを示さないと判断できないと思うんですが。
sazi

2018/03/26 04:41

insertやupdateでやってるのか、recordsetを経由しているかも分かんないので、コード提示が無い状況ではエスパー回答しかできないと思います
guest

回答3

0

自己解決

vbs

1 2Set objCMD = CreateObject("ADODB.Command") 3objCMD.ActiveConnection = objADO 4objCMD.CommandText = strInsertSql 5objCMD.CommandType = 1 6 7Dim paramNum 8paramNum = 0 9 10objRs.MoveFirst 11 12Do Until objRs.EOF 13 Dim columnType 14 columnType = getColumnType(objRs.Fields("DATA_TYPE").Value) 15 Set param = objCMD.CreateParameter(paramNum, columnType, adParamInput, objRs.Fields("DATA_LENGTH").Value ) 16 17'数字項目に文字が入っていた場合 18 If columnType = adNumeric And Not IsNumeric(Trim(aryCsvResult(paramNum))) And Not Trim(aryCsvResult(paramNum)) = "" Then 19 20 'error処理 21 objLogFile.WriteLine ("エラーメッセージ") 22 END_CODE = ERR_SQL 23 Exit Do 24 End If 25 26 If Trim(aryCsvResult(paramNum)) = "" Then 27 param.Value = null 28 Else 29 param.Value = aryCsvResult(paramNum) 30 End If 31 objCMD.Parameters.Append param 32 paramNum = paramNum + 1 33 objRs.MoveNext 34Loop 35 36Err.Number = 0 37objCMD.Execute() 38 39

原因を根絶できたわけではありませんが、どうもvbs側の問題ではないようで、結果としては上記の形で、数字項目に文字データが入っていた場合をIf文でピックアップして、処理するようにしました。

投稿2018/03/27 02:58

Kiri_Tanpo

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

Create文で「Not Null」にして「Default 0」にするといいかも。

投稿2018/03/26 02:58

cutedog

総合スコア177

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kiri_Tanpo

2018/03/27 13:43

今回のはすでにテーブルが存在している前提なので、出来るのか分かりませんが、数値型はNullを入れないようにするのはありかもしれませんね。
guest

0

ODBCなどに多いハナシで、暗黙のTRIMが実行されて空白がNULLなった、ってオチかも?

投稿2018/03/26 02:46

編集2018/03/26 03:04
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kiri_Tanpo

2018/03/27 13:42

Nullになったデータは空白ではなく、文字列ですね。 別の話ですが、文字列でも数値が多いと暗黙的に数値型に変換して、nullを吐くようなので、それに近いものかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問