SQLでのマルチバイト(全角)のワイルドカード(%, _)

動かないであろうと思った以下のselectがちゃんと動いた。

select * from table
 where TO_MULTI_BYTE(UPPER(COLUMN_NAME)) like TO_MULTI_BYTE(UPPER('%test%'));

http://metroit.hatenablog.jp/entry/2017/05/12/095949

を見ると

  • Oracle のバージョンが11.2.0.3 未満の場合は動作する。
  • Oracle のバージョンが11.2.0.3 以上の場合は動作しない。

とあり、そのものズバリで、動いた環境は10.2.0.2だったのだ。やはり、

select * from table
 where TO_MULTI_BYTE(UPPER(COLUMN_NAME)) like '%' || TO_MULTI_BYTE(UPPER('test')) || '%';

と書くべき。

PL/SQL配列・ループテスト

PL/SQLの配列=コレクション型 に詳細がある。配列は1オリジン。配列のメソッドについては、 配列で使用可能なメソッド が詳しい。

/*
 * C:\> C:\ORACLE\PRODUCT\XX.Y.Z\CLIENT_1\bin\sqlplus.exe USER/PASSWORD@SCHEMA
 * SQL> SET SERVEROUTPUT ON
 */

DECLARE
  TYPE tCodeArray IS VARRAY(100) OF TABLE_A.ID%TYPE;
  vOperCodes tCodeArray := tCodeArray('select', 'insert', 'update', 'delete');
  
  PROCEDURE testProcedure (num IN NUMBER, kind IS VARCHAR2) IS
    vNumber VARCHAR(10);
    vId     TABLE_A.ID%TYPE;
    vName   TABLE_A.NAME%TYPE;
  BEGIN
    vNumber := TO_CHAR(num, 'FM0000');
    vId := 'TEST' || vNumber;
    vName := 'テスト' || TO_MULTI_BYTE(vNumber);
    IF (kind = 'insert') THEN
      DBMS.OUTPUT.PUT_LINE('Inserting to XXXX was succeeded. ID='
          || vId || ' NAME=' || vName);
    ELSIF (kind = 'delete') THEN
      DBMS.OUTPUT.PUT_LINE('Deleting from XXXX was succeeded. ID='
          || vId || ' NAME=' || vName);
    ELSE
      DBMS.OUTPUT.PUT_LINE('Not execute');
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
      DBMS.OUTPUT.PUT_LINE('Error occured. ID=' || vId);
  END;

BEGIN
  FOR i IN 1 .. vOperCodes.count LOOP
    IF (MOD(i, 2) = 0 OR i = 3) THEN
      testProcedure(i, vOperCodes(i));
    ELSE
      DBMS.OUTPUT.PUT_LINE('Not target=' || vOperCodes(i));
    END IF;
  END LOOP;
END;
/

Windows Modules Install Workerがとてつもなく重い件

Windows10 on VM(Memory4GBの1Core)で動かしていて、Windows Modules Install Workerが起動しちゃうと重くてどうしようもない。

WindowsModulesInstallWorker爆食い
WindowsModulesInstallWorker爆食い
終了するまでほっとくしかないらしいが、CPU一人で食べまくりって。。。リミッター付けらんないのかなぁ。。。

eclipse 4.8 Photon(pleiades)へのTomcat Pluginインストール

eclipse 4.8 Photon(pleiades)にはTomcat Pluginがインストールされていない。 なので、メニュー「ヘルプ」の「Eclipseマーケットプレース」からインストールする。

通常

Eclipseマーケットプレース画面で、tomcatで検索すると Tomcat Pluginが表示されるので「インストール」。 同意画面で同意すれば、インストール後、「再起動しますか」と聞いてくるので再起動。

f:id:kazuokohchi:20190705142249p:plain
eclipse market place

その2

上記方法では、「リポジトリが読み取れない」みたいなエラーになってインストールできない場合があった。 その場合は以下のサイトを参照してEclipse Tomcat Plugin - Browse Files at SourceForge.netからzipをダウンロードし、メニュー「ヘルプ」の「新規ソフトウェアのインストール」からインストール可能だった。

eclipse Neon(4.6)にTomcatプラグインをインストールする方法

うーん、何が違うんだろう???

VMware Fusion上のWindows10でのALT+Print Screenはどうするのか

Windows10 on VMware Fusion でのALT + Print ScreenはOption + F13のようです。 Macに慣れているとデスクトップにファイルが出来るつもりでいますが、Windowsではクリップボートに コピーされるだけなので自分でペイントなりに貼り付けてあげます(Option+F13した後、あれ?できねーって暫く考えてた^^;)。

また、PrintScreenだけなら、「仮想マシン」の「キーの送信」から「Print Scrn」を選べるようです。

その他のキーマッピングも設定できるようで以下のサイトを参照のこと。

(Mac)VMware Fusion 8で仮想マシン(Windows8.1)上でのアクティブウィンドウのスクリーンショットをキャプチャするショートカットキーを追加する

明示的なカーソル

参考は以下。

https://www.shift-the-oracle.com/plsql/cursor-loop.html

--
-- 指定行数だけ昇順IDを表示
--
SET SERVEROUTPUT ON

DECLARE
  --  引数なしの場合は()もいらない
  CURSOR cX(MAX NUMBER := 100) IS
    SELECT ROWNUM, A.*
      FROM (SELECT ID FROM B WHERE FLAG <> 1 ORDER BY ID) A
     WHERE ROWNUM BETWEEN 0 AND MAX;
BEGIN
  -- デフォルト100。値を指定する場合はcX(500)とかする
  FOR vRec IN cX() LOOP 
    DBMS_OUTPUT.PUT_LINE('ID=' || vRec.ID);
  END LOOP;
END;
/  

VBAではできるがVBScriptではできないこと

VBScriptを修正してたら以下のエラーダイアログが表示した(Javascriptでエラーになったときと同じダイアログ)。

エラー: ステートメントがありません。

VBScriptでGoToを記載していたためらしい(VBAではできる)。

<script language="VBS">
....
  For i = 1 To 10
    ....
    If 条件 Then
      GoTo Continue
    End If
    ....
Continue:
  Next
....
</script>

以下の記事も参照のこと。

VBA の機能で VBScript に含まれていない機能

VBAにできてVBSにはできないランキングベスト5