2015年9月13日 星期日

[Oracle] 取得user的office level

功能:取得user的office level
情境:每家公司應該都會有office階層, 從總公司, 分公司, 分公司的分公司, ...一層層下去,
現在想要知道某位同事所屬的office(包含其上層到源頭總公司)階層
CREATE OR REPLACE FUNCTION SCHEMA_NAME.GET_USER_OFC_LEVEL(p_user_id VARCHAR2)
RETURN VARCHAR2
IS
/*
CREATED BY CHRIS ON 2015.09.14
*/
vUSERPath VARCHAR2(200);
vOFFICEID OFFICE.OFFICE_ID%TYPE;
vOFFICE OFFICE.OFFICE%TYPE;
vUPOFFICEID OFFICE.UP_OFFICE_ID%TYPE;
BEGIN
    SELECT B.OFFICE_ID,B.OFFICE,B.UP_OFFICE_ID INTO vOFFICEID,vOFFICE,vUPOFFICEID FROM USERS A, OFFICE B WHERE A.OFFICE_ID=B.OFFICE_ID AND A.USER_ID=p_user_id;
    
    vUSERPath := vOFFICE;
    
    WHILE vUPOFFICEID <> 0
    LOOP
        SELECT OFFICE_ID,AGENT,OFFICE,UP_OFFICE_ID INTO vOFFICEID,vAGENT,vOFFICE,vUPOFFICEID FROM OFFICE WHERE OFFICE_ID=vUPOFFICEID;
        // UP_OFFICE_ID就是OFFICE_ID的上一層
        
         vUSERPath := vOFFICE || ' ==> ' || vUSERPath;
    END LOOP;
    
    RETURN vUSERPath;
END;
取得user的office level
SELECT GET_USER_OFC_LEVEL('CHRISLIN') FROM DUAL;
結果可能類似下面
HQ ==> ERO ==> HAM

2015年9月7日 星期一

[NodeJS] nodejs加密工具NPK

NPK投影片
NPK Github

npk, 簡單說就是一個幫NodeJS加密的工具.
支援一般加密方式, 也有支援透過compile編譯成binary的方式.

下面是在Windows 7 64bit平台操作, node版本要v0.10才行(後面會說原因)
node.js v0.10.0 官網下載
node.js各版本 官網下載

1. npk安裝
npm install npk -g
NPM安裝的東西預設是放在
C:\Users\chrislin\AppData\Roaming\npm\node_modules
如果只有要用Remove Mock-up (default)跟Mom doesn't recognize兩種加密方式, 做到這就可以了.
若要用Dad doesn't recognize加密, 就往下繼續做.

2.1. node-gyp 安裝(參考)
npm install -g node-gyp
2.2. Microsoft Visual Studio C++ 安裝(我自己是裝VS 2015 Professional)

2.3. Microsoft Windows SDK for Windows 7 and .NET Framework 4 安裝 (下載)

我有遇到Microsoft Windows SDK裝不進去的問題, 參考官網解法
● 解除安裝Microsoft Visual C++ 2010 x64 Redistributable
● Microsoft Windows SDK安裝
● 重新安裝Microsoft Visual C++ 2010 x64 Redistributable (下載)

npk怎麼用?
1. 先從NPK安裝好的目錄copy範例出來改, 我是copy下面目錄
C:\Users\chrislin\AppData\Roaming\npm\node_modules\npk\tests
2. 目錄說明
tests\purejs\lib 放NodeJS source code的地方
tests\package.json 目錄設定檔(設定source code以及output code位置等...)
tests\purejs\out\app.js 加密後產生output code的地方
tests\purejs\out\app.js\app.js 加密後的檔案

3. 執行
npk tests\purejs\
npk tests\purejs\ --mom-doesnt-recognize
npk tests\purejs\ --dad-doesnt-recognize

3.1.執行時出現下面錯誤(不過binding.gyp跟output.cpp還是有產生), 要設定環境變數

3.2.新增Python環境變數


PYTHONPATH=D:\Program Files (x86)\Python\27 PYTHON=%PYTHONPATH%\python.exe
4. 小編運氣不好, 執行爸爸不認識還是有問題(還是上面的錯誤), 所以還是去看一下npk背後怎麼作業

4.0. npk原始檔及相關lib位置
C:\Users\chrislin\AppData\Roaming\npm\node_modules\npk\lib
4.1. 把NodeJS檔案編譯成output.cpp, 並產生binding.gyp

4.2. 利用node-gyp把output.cpp編成binary
node-gyp configure
node-gyp build

4.2.1. 先到專案目錄下
C:\Users\chrislin\Desktop\tests\purejs\out\app.js
4.2.2. 執行configure沒問題
node-gyp configure
4.2.3. 再執行build
node-gyp build
4.2.4. 會發現出現下面錯誤訊息

去大神查了一下, 發現v8.h這個library在node v0.10跟v0.12是不一樣的(參考網頁)
像是v8::String在這兩個版本就不一樣(如下)

但是npk的compiler產生cpp的寫法是用v0.10
C:\Users\chrislin\AppData\Roaming\npm\node_modules\npk\lib\compiler.js
所以我就把v0.12移除, 重新裝了v0.10

5. 結果執行爸爸不認識還是同樣的錯誤ORZ
compiler.js似乎只執行到self.generateMakefile產生出binding.gyp
child_process.spawn執行node-gyp好像有問題@@?

6. 只好先用下面方式產生binary檔案了= =
● 產生configure需要的兩個檔案: binding.gyp跟output.cpp
npk tests\purejs\ --dad-doesnt-recognize
● 手動compile, 產生npk.node
cd tests\purejs\out\app.js\
node-gyp configure
node-gyp build

產生的binary檔案位置
C:\Users\chrislin\Desktop\tests\purejs\out\app.js\build\Release\npk.node
之後就可以用require('npk.node')的方式使用此檔案