おすすめ本

最近のトラックバック

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

AccRanking

Ad

2019年7月 3日 (水)

【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法

MySQL ではユーザー変数を定義しそれを SELECT 文のなかで使えます。
以下のSQLの実行は行番号を付加する例です。
SET命令でユーザー変数 @NUM を宣言し、その変数を SELECT で使用しています。

結果表示を見れば、行番号として値が表示されていることが分かります。

SET命令と SELECT文の2行が少し気になるので、 調べてみたら以下の様に、SET命令の部分をダミーのテーブルでの宣言として一体化できます。

GROUP BYORDER BY 句を行った場合にも行番号は付加できる様です。

但し、ユーザ変数の計算部分の処理が1行毎最初に処理される様に思いますが、 クエリー結果でその処理順番が保障されるとも限りません。 この辺りは、個々の場合で調べる必要があります。

楽天市場

■関連記事
【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
【MySQL】カラム名を囲むバッククオートについて
【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について

【MySQL】カラム名を囲むバッククオートについて

いつも何気なくカラムを使う時には、ほぼカラム名をバッククオート「`」で囲んでいます。
バッククオートは無くても問題は無いのですが、全角文字をカラムにしている場合は 経験上から気持ち悪いのでそうしています。

Oracleなんかだと、バッククオートではなくダブルクォートで囲みます。

以下の記事のテーブルを例にバッククオートでの囲み方を示します。

【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTER TABLE)


最初の SELECT 文はバッククオート無し TEST1 テーブルの全てを検索していますが、 2番目の SELECT ではカラム及び、テーブル名をバッククオートで囲っています。

バッククオートですが何が有利なのかと言えば、カラム名が予約語でもOKなのです。 (普通は予約語をカラム名にしませんが)
以下の例を見て下さい。 カラム名には相応しくない INSERT ですが、取り敢えずテーブルに追加して SELECT してみます。

結果は問題無く出来る様です。(しかし、予約語はいけませんが。)

バッククオートは少し面倒くさいのですが、カラム名などをはっきりと区別できる点もありますし、 使った方が良いと思います。 (テーブルの別名にもバッククオートは付加できます)

楽天市場


■関連記事
【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
【MySQL】カラム名を囲むバッククオートについて
【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について

【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTER TABLE)

仕様変更などでテーブルのカラム追加が発生しますが、 この時複数のカラムを位置指定で行う方法について記します。

先ずは、最初に例となるテーブルを以下の様に作成します。 このテーブルはテストなので、特に主キーなどは追加しません。


このテーブルの COL2 の次に ADDCOL1ADDCOL2 と言う名前で VARCHAR 属性で追加します。


これを実行してテーブルを見てみると、カラムが追加されたことが分かります。

楽天市場


■関連記事
【MySQL】テーブルカラムは大文字・小文字の区別が無いので注意が必要
【MySQL】テーブル作成時にカラムにAUTO_INCREMENTを設定する方法について
【MySQL】テーブルカラムに後からAUTO_INCREMENTを設定する方法について
【MySQL】文字列カラムに追加で更新する方法について(CONCAT)
【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTERTABLE)

2019年6月 1日 (土)

【MySQL】文字列カラムに追加で更新する方法について(CONCAT)

VARCHARTEXT で定義されている文字列カラムに対して、文字列の追加更新を行う場合には 以下の様に CONCAT 関数を使って更新を行います。


この方法で一見よさそうなのですが、 更新対象のカラムが元々 NULL の場合には結果として NULL と更新されてしまいます。

CONCAT 関数は連結するデータが NULL の場合には NULL を返すため、 結果として対象のカラムが NULL に更新されます。

そこで以下の様に IFNULL 関数で NULL の場合には空文字('')の判定を行ってやります。


これで何とか目的の更新処理が行えると思います。

楽天市場


■関連記事
【MySQL】テーブルカラムは大文字・小文字の区別が無いので注意が必要
【MySQL】テーブル作成時にカラムにAUTO_INCREMENTを設定する方法について
【MySQL】テーブルカラムに後からAUTO_INCREMENTを設定する方法について
【MySQL】文字列カラムに追加で更新する方法について(CONCAT)
【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTERTABLE)

2019年4月 4日 (木)

ORA-28002: the password will expire within 7 days がログイン時に発生

久々にOracleネタですが、Oracleを動かそうとして、データベースに接続すると以下のエラーメッセージが表示されました。

エラーメッセージは ORA-28002: the password will expire within 7 days.

あと7日でパスワードの期限が切れますよというお知らせのようです。

以下のコマンドで、ユーザのパスワードを変更しました。

alter user 「USERNAME」 identified by 「PASSWORD」


これで、ORA-28002 のエラーが表示されない様になりました。



■関連記事
Oracleファンクションのソースを表示する方法について・覚え書き
Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法
OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)
ORA-28002: the password will expire within 7 days がログイン時に発生
ORA-28001 the password has expired でユーザに接続不可