C言語の基礎的な関数リストです。
続きを読む C言語: 基礎の関数Kenji のすべての投稿
数秘術に基づくあの年の運勢
eclipse 日本語フォントの幅がおかしいとき
eclipse で日本語のコメントを書いたりすると、フォントの幅がおかしくなることがあります。 そもそも日本語は等幅フォントで表示されていません。 そこで今日は、日本語を等幅フォントで表示する方法を書きます。
続きを読む eclipse 日本語フォントの幅がおかしいときeclipse で折り返しする方法
eclipse は標準では行の折り返し表示ができません。長い文になると自分で改行する必要があります、 Visual Basic 6 のように。
そんなこともあり、eclipse から距離を置いていたのですが、今日、折り返しする方法を見つけました。 プラグインを使用します。
試したことのあるプラグイン
- EclipseColorer
色をつけたりするのが売りの機能ですが、それだけではなく、行の折り返し表示もできます。
- Eclipse Word-Wrap
行の折り返しに特化したプラグインです。 (ただし、EclipseColorerと違って行番号表示がおかしくなります。)
Eclipse の比較対象とされることが多い Netbeans や Intellij Idea では折り返し表示ができます。
機能として追加されました
eclipse の改行については長い間議論されていて、 2003年時点で折り返し機能の要望が Eclipse のサイトに挙がっています。
そして Eclipse 4.6 M4 Neon で待望の折り返し機能が追加されました。 (参考: Eclipse Project Neon (4.6) M4 News)
ORA-01799: 列は副問合せに対して外部結合されません。
今日もエラーが出ました。
ORA-01799: 列は副問合せに対して外部結合されません。
下のように解決しました。 (使っているデータベースは Oracle 10g か 11g のどっちかでした。)
事例 1
エラーが出たのは次の結合条件。
1 2 3 4 |
LEFT JOIN JNYUKA FNY ON FNY.BUNNO = (SELECT MAX(SNY.BUNNO) FROM JNYUKA SNY WHERE SNY.BUNNO <= MAIN.BUNNO) |
LEFT JOIN
で結合するテーブルの結合条件に副問合せをつかうと駄目みたいです。
期待する結果
上のコードでやりたいのは、 JNYUKA.BUNNO
がメインテーブルの値(MAIN.BUNNO
)以下になっているもので、最大のものをとることです。下のように。
MAIN BUNNO | JNYUKA BUNNO | FNY BUNNO |
---|---|---|
1 | 1 | 1 |
2 | 2 | 2 |
3 | 2 |
上のコードではエラーがでます。 カーソルを使っていったんテーブルに入れるのも面倒です。そこで・・・
1 2 3 4 5 6 |
LEFT JOIN JNYUKA FNY ON FNY.BUNNO <= MAIN.BUNNO AND NOT EXISTS(SELECT 1 FROM JNYUKA SNY WHERE SNY.BUNNO > FNY.BUNNO AND SNY.BUNNO <= MAIN.BUNNO) |
このようにすればエラーはでません。 BUNNO
がメインテーブル以下のものをすべて結合した後で、最大のもののみに絞り込むイメージ。
事例 2
別の例があったので・・・
Oracleで子テーブルの最新を外部結合できない!? で次のコードを見つけました。
1 2 3 4 5 6 7 8 9 |
select member.* from MEMBER member left outer join MEMBER_LOGIN memberLogin on member.MEMBER_ID = memberLogin.MEMBER_ID and memberLogin.LOGIN_DATETIME = (select max(MEMBER_LOGIN.LOGIN_DATETIME) from MEMBER_LOGIN where MEMBER_LOGIN.MEMBER_ID = member.MEMBER_ID) |
この場合だと
1 2 3 4 5 6 7 8 9 10 |
select member.* from MEMBER member left outer join MEMBER_LOGIN memberLogin on member.MEMBER_ID = memberLogin.MEMBER_ID and not exists(select MEMBER_LOGIN.MEMBER_LOGIN_DATATIME from MEMBER_LOGIN where MEMBER_LOGIN.MEMBER_ID = member.MEMBER_ID and memberLogin.LOGIN_DATATIME < MEMBER_LOGIN.LOGIN_DATATIME) |
とすればいいことになります。
ON
ではなくて JOIN
の中に条件を入れてしまう方法でも解決できます。