おすすめ本

最近のトラックバック

  • event (夢茶爺&苦茶爺のPC奮戦備忘録)

AccRanking

Ad

« 2017年10月 | メイン | 2018年1月 »

2017年11月

2017年11月29日 (水)

【Oracle SQL】SUBSTR関数でVBのRight、Left関数の様な使い方

Oracleの関数には、VB.NETで用意されているRight関数Left関数が存在しません。 文字列の抽出で、左から何桁とか、右から何桁とかを切り出す処理はよくあるものです。 OracleではSUBSTR関数しかないので、これを使うしかありません。

SUBSTR関数の引数は以下の様になっています。

SUBSTR ( string , position [, length] )
SUBSTRB ( string , position [, length] )

・string:抽出元の文字列
・position:抽出開始位置(1~) 
 (負の場合は右端から逆順に処理)
・length:抽出文字列長
・関数の戻り値:抽出文字列

SUBSTRは文字列をキャラクタ単位での処理を行い、 SUBSTRBは文字列をバイト単位での処理を行います。

文字列に漢字等のマルチバイト文字が含まれている場合にはSUBSTRBは問題があります。 文字コードがシフトJISの場合で例を示しますと以下の様になります。
SUBSTRは全角文字があっても、1文字は1文字として処理されます。 ただし、SUBSTRBは4つ目の例でも分かるように、漢字の泣き別れが発生し、 3桁目には半角の空白が返ってきます。
漢字の泣き別れの件はどうするのかは、テーブル設計や、出力する時に対応する様に するしかないと思います。
上の例の position のところをマイナスにすると以下の様になります。
文字列の最後からの処理になっているのが分かります。 さて、Right関数 Left関数 的な利用ですが、 Right関数 では position を 「1」として length に文字数を設定します。 Left関数 では position を文字数のマイナス値として length に文字数を設定します。 尚、番号などを先頭「0」付きで編集する場合、以下の様な使い方もあります。 TO_CHAR関数 でフォーマットを使えば2行目の様にできますが、 変換する数値が8桁より大きく、表示が下8桁のみの場合は1行目の方法も有用かと思います。

■関連ページ
OracleSQLの関数の中でよく使用するものその1
OracleSQLの関数の中でよく使用するものその2
OracleSQLの集計関数

Oracleの基本 ~データベース入門から設計/運用の初歩まで


楽天市場

2017年11月18日 (土)

VB.NET:FTPサーバへのアクセスでエラー発生(慌てたが、ログインユーザのパスワード期限切れ)について・覚え書き

FTPサーバへファイルをアップするプログラムを作成したのですが、 久々に動作させてみたら、エラーが発生してしまいました。
ついこの間、1か月前ぐらいまでは動作していたので少し慌ててしまって、 ちょっと青ざめてしまいました。

プログラムでのTry...Catchでエラーの内容をログで確認すると以下の様な感じでした。 (最後のソースの場所については割愛した部分があります) 原因としては、FTPのユーザのログインでエラーが発生しているようです。
このときのプログラムは抜粋ですが以下の様な感じです。

そこでログインエラーの原因を探るために、Windowsのコマンドプロンプトを起動し、 FTPサーバーに接続してみようと思いました。 (ユーザのIDは伏せてありますが、FTPユーザは「ftpuser」という名前です) 上記のエラーメッセージを見ると「The password for this account has expired.」が 返ってきていて、パスワードが期限切れでした。
「ftpuser」のパスワードを再設定し、事無きを得ました。 (パスワードを無制限にしておけばいいのですが)

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版


楽天市場

2017年11月 2日 (木)

VB.NET:Oracleファンクションを呼出す時の方法について・覚え書き

Oracleファンクションを呼出す時の方法ですが、最近使ったので覚え書きとして一般的な例を記します。

ファンクションの例として入力及び戻り値が同じで、 各データ型(Number型、Varchar2型、日付型)の3個のファンクションを定義します。
ファンクションのソースは以下の通りです。 ソースをご覧になれば分かりますが、これらのファンクションは特に複雑な処理は行わず、 入力値に1を加算したり、文字列を付加して値を返す簡単なものです。

これらのファンクションのみを使う場合は DUAL 表を使えば通常のSELECT文でテストできます。 例えば、以下の様なSQL文を実行してみます。 ここでは、TEST_FNC3の出力のカラム幅が80桁になって表示が乱れるので あえてカラム幅を20桁に設定する COLUMN 命令を使っています。

SELECT文の出力を見れば、入力値に対して処理された値が返ってきているのが分かると思います。

この処理をVB.NETから操作する例は以下の通りです。 (フォーム上のボタンクリックイベントの中に処理を記述してあります)
■関連ページ
OracleSQLのその他・Tips等について
ODP.NET について

ひと目でわかる VisualBasic 2013/2012データベース開発入門 (MSDNプログラミングシリーズ)


楽天市場

2017年11月 1日 (水)

VB.NET:Oracleプロシージャを呼出す時の方法について・覚え書き

Oracleプロシージャを呼出す時の方法ですが、最近使ったので覚え書きとして一般的な例を記します。

プロシージャの引数は、入力がNumber型、Varchar2型、日付型の3個で、 出力は入力の値を更新して結果を返す、Number型、Varchar2型、日付型の3個で定義します。
プロシージャのソースは以下の通りです。 ソースをご覧になれば分かりますが、このプロシージャは特に複雑な処理は行わず、 入力値に1を加算したり、文字列を付加する簡単なものです。

このプロシージャをVB.NETから操作する関数の例は以下の通りです。 先ず、オラクルに接続後、プロシージャ名を指定してでOracleCommand生成します。 その後、OracleCommandParameters オブジェクトに入力及び、出力の引数を追加してやります。 各 OracleParameter の生成で注意する点は、データがVarchar2型で、データ長を設定する必要があります。 データ型のサイズが分かっているNumber、Date等は必要無いようです。

■関連ページ
OracleSQLのその他・Tips等について
ODP.NET について

ひと目でわかる VisualBasic 2013/2012データベース開発入門 (MSDNプログラミングシリーズ)


楽天市場