Oracle はシーケンスがなくても 「ORA-00942: 表またはビューが存在しません。」
Oracle は 12 からシーケンスを使った自動採番(MySQL でいうところの AUTO_INCREMENT )がやり易くなったのですが、相変わらずエラーメッセージでハマったので。
というのも、以下のようなSQLでテーブルを作ろうとしたわけですよ。
Oracle は 12 からシーケンスを使った自動採番(MySQL でいうところの AUTO_INCREMENT )がやり易くなったのですが、相変わらずエラーメッセージでハマったので。
というのも、以下のようなSQLでテーブルを作ろうとしたわけですよ。
とにかくカラムの多いテーブルのデータの検証をする場合、やっぱりSQLは SELECT * FROM ・・・
って書くのが楽だったりします。
例えば1ヶ月で1行できるデータがあったとして、そのデータが12ヶ月分揃っているか確認しなくちゃいけなくなったとします。
Oracle のテーブルで他の DBMS にあるような AUTO INCREMENT を実現しようとした場合、これまではシーケンスを作成してテーブルにトリガーを仕込んで・・・。というのが一般的な方法だったわけですが、12c からはもっと楽にできるようになっていました。
というのも、テーブルのカラムの DEFAULT に、シーケンスの nextval が指定できるようになったんです。
つまりはこういうこと。
Oracle でテーブルを作る際に、NOT NULL と DEFAULT を同時に設定しようとしてハマったので。今更感満載ですがメモメモです φ(..)。
どこでハマったかって、記述する順序なんですよ。例えば以下の SQL ではエラーになってしまいます。
でも NOT NULL と DEFAULT を記述する順番を入れ替えると、通るんですよ。こんな感じで。
カラム名とカラムの型以外の指定の順序なんて、それなりに解釈してくれるものと思っていたのですが、やっぱり順番って大事なんですね。
久しぶりに Oracle を使ったシステムのテスト環境を作ろうとしたら、「リスナーがありません」というエラーでハマったので、忘れないためにも解決策をメモメモです φ(..)。
ちなみに状況によって「ORA-12224: TNS: リスナーがありません」と「ORA-12541: TNS: リスナーがありません」という、エラーコードの違う2パターンのメッセージが出るようですが、内容的にはどちらも同じっぽいです。
先日 Windows Server 2008 R2 にインストールした Oracle 10g (10.2.0.5) に、SQLPlus からアクセスしたところ・・・、日本語が文字化けしてるじゃないですか!
症状としては、全角の文字が全て '?' で表示されるというもので、サンプルとしては以下のような感じでした。
C:\> sqlplus /nolog SQL*Plus: Release 10.2.0.5.0 - Production on Tue Apr 1 10:00:00 2014 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. SQL> connect / as sysdba ???????? SQL>
う~ん、これでは何が何やらで作業ができませんがな。というわけで、対処法をメモメモです φ(..)。
久しぶりに Oracle にテーブルを作ろうと create table文を実行したところ、「ORA-00907: 右カッコがありません。」 と怒られてしまいました・・・orz
ちなみに実行したのはこのようなSQLです。
CREATE TABLE USER( USER_ID NUMBER(13) NOT NULL, USER_NAME VARCHAR(20) NOT NULL DEFAULT '', CREATE_DATE DATE NOT NULL DEFAULT SYSDATE )
とりあえず目を皿のようにして SQL文を舐めるように見直したのですが、何度数えなおしてもカッコの数は合ってます。あるえ?
Oracleの関数で、数値の丸めについて調べていてふと気になったのですが、四捨五入(ROUND)と切り捨て(TRUNC)はあるのに、切り上げって無いんですね。
ちなみに、ROUND と TRUNC の動作は以下のようになります。
ROUND(number) | numberの小数点以下を四捨五入する |
ROUND(number, integer) | numberの小数点integer桁目の次の桁で四捨五入し、 小数点integer桁までの数値にする |
TRUNC(number) | numberの小数点以下を切り捨てる |
TRUNC(number, integer) | numberの小数点integer桁目の次の桁以下を切り捨て、 小数点integer桁までの数値にする |
さて、じゃあ切り上げはどうするの? というところなんですが、操作対象の桁に4を足して四捨五入したり、9を足して切り捨てれば何とかなりそうです。
例えば、ROUND(number+0.4) とか、TRUNC(number+0.9) とすれば良さそうですよね。
うん、いい感じ。
また小数点第何位とかを求める時には、ROUND(1.234 + 0.004, 2) とかすれば出来ます。
頻繁に使う場合は関数を作っておくと、何かと便利そうです。幸いWeb上に関数のソースを公開されている方を見つけることが出来たので、僕は素直に使わせてもらうことにします。
参照リンク
・ORACLE SQL 四捨五入・切り上げ・切り捨てをする - ROUND、TRUNC、ROUNDUP 関数 | saka-en
(切り上げの関数ROUNDUPのソースを公開しておられます)
Windows Server 2008 R2(以下、Win2008R2)に Oracle10g(以下、10g)をインストールするための覚え書きです。
まず前提として、Win2008R2 は64bit版しかないので、10gも64bit版の x64 のものをインストールする事になるわけですが・・・。
ところがこの64bit用のインストールディスクが問題でして、バージョンは 10.2.0.4 というものなのですが、Win2008R2 には対応してないんですよ。
しかも困ったことに、Win2008R2に対応した10gにするためには 10.2.0.5 のパッチを当てないといけません。つまりどうしても先に 10.2.0.4 をインストールしておく必要があるんです。
それなのに、あぁ、それなのに、 10.2.0.4 のインストーラーを起動すると、「このOSのバージョンには対応してません」 とか言われてそこで止まっちゃうんですよ。一体どうしろと?