2014年7月21日 星期一

使用ORACLE 10I 以上,來解 BOM 表與求需求量

TIPTOP ERP ORACLE BOM QTY

/*正解*/

select bmb01, bmb03, level, bmb06,
    LTRIM(sys_connect_by_path(bmb01, '->'), '->') fpath,
    LTRIM(sys_connect_by_path(bmb06, '->'), '->') ausage,
    str_mult(sys_connect_by_path(bmb06, '*')) quate
 from bmb_file
start with bmb01 like '01DS102200G%'
connect by prior bmb03=bmb01

/*或是使用 olap 內建的FUNCTION, 因為我的環境沒安裝這東西所以無法使用*/
select bmb01, bmb03, level, bmb06,
    LTRIM(sys_connect_by_path(bmb01, '->'), '->') fpath,
    LTRIM(sys_connect_by_path(bmb06, '->'), '->') ausage,
    dbms_aw.eval_number(ltrim(sys_connect_by_path(bmb06, '*'), '*')) quate
 from bmb_file
start with bmb01 like '01DS102200G%'
connect by prior bmb03=bmb01



CREATE OR REPLACE FUNCTION GWH.str_mult(p_str IN VARCHAR2) RETURN NUMBER
AS
    l_str VARCHAR2(1000):=p_str||'*';
    l_n   NUMBER;
    l_data NUMBER:=1;
BEGIN
    IF instr(l_str,'*')=1 THEN
       l_str:=SUBSTR(l_str,2);
    END IF;
    LOOP
          l_n:=instr(l_str,'*');
        EXIT WHEN (NVL(l_n,0)=0);
        l_data:=l_data*TO_NUMBER(SUBSTR(l_str,1,l_n-1));
        l_str:=SUBSTR(l_str,l_n+1);
    END LOOP;
    RETURN l_data;
END;

2014年5月27日 星期二

informix table lock

select unique
 dbsname db,
 tabname ,
--zt02,
 case
 when type="S" then "shared lock"
 when type="IS" then "intent shared lock"
 when type="SIX" then "shared intent excl lock"
 when type="XS" then "shared key value by RR"
 when type="IX" then "intent excl lock"
 when type="X" then "exclusive lock"
 when type="XR" then "excl key value by RR"
 when type="U" then "update lock"
 when type="B" then "byte lock"
 else
 "unknown lock type"
 end lock_type,
 lpad(owner,5) ses_id,
 lpad(waiter,5) wait_id
 from sysmaster:syslocks
--  left outer join ds:zt_file on zt01=tabname
 where tabname != 'sysdatabases'

找出 wait_id 有值的.代表他在等某一個東西 release.

nstat -g ses | grep  88999  (note ses_id)
find session id to query processs id  再去KILL 他.




2014年5月6日 星期二

informix table extent 相關

Informix DB:
create table 時 informix 會先allocate 一個空間給這個TABLE 使用. 如果空間不夠時. informix 會再allocate 一個空間來使用.如果這二個空間剛好都是連在一起,在Informix 中我們叫他為一個 extent,資料庫長時間使用下有可能使得TABLE的EXTENT 值變大.大過一定值(200以上?) 會出現錯誤.這時我們就要重新規劃了.

先用以下命令去找.所有資料庫table extent與他的SIZE

select
     dbsname,
     tabname,partnum,
     count(*) num_of_extents,
     sum(pe_size) total_size
from
     systabnames, sysptnext
where
       partnum = pe_partnum
  and  partnum  > 99
  and  dbsname <> "sysmaster"
  and  dbsname <> "sysutils"
  and  tabname <> "TBLSpace"
group by 1,2,3
order by 1,5 desc ;

我查出我的MYTABLE001 他空用有201個EXTENT 共 771400 KB ,
這時我要先建一個TABLE 內容與原TABLE 名稱多加個_TEMP 並同時給他初始大小與增大大小(KB)

CREATE TABLE tiptop.mytable001_temp (
    imk01  CHAR(20),
    imk02  CHAR(10),
    imk03  CHAR(10),
    imk09  DECIMAL(15,3)
    )
EXTENT SIZE 921600 NEXT SIZE 61440
LOCK MODE PAGE

之後再把資料insert 到Temp table
insert into mytable001_temp select * from mytable001
再把原TABLE DROP, 再把temp table rename 到原table
drop table mytable001
RENAME TABLE mytable001_temp  TO mytable001
經過這次的轉換後.沒問題了.
注意.要先把原來的 trigger, index 相關語法備份下來喔

2014年4月29日 星期二

2014年1月7日 星期二

DD-WRT 用Telnet 進去 清空所有設定.

參考:
http://www.dd-wrt.com/wiki/index.php/Factory_Defaults#From_the_Command_Line_.28Telnet_or_SSH_or_Web_GUI.29
因為restore 錯的設定所以WEB 起不來.只好回復成最初值.
用telnet 登入 ddwrt

mtd erase nvram;
reboot

之後就可以用 root/admin 來登入系統了.

2014年1月3日 星期五

aspnet membership 忘記密碼.

這方式只能選用一個已知的密碼 用他的密碼來改寫到別的使用者上

假如我知到 webadmin 這個密碼為 XXXXX 我可以以下的語法來得知密碼的相關值.

SELECT password, passwordformat, passwordsalt
FROM aspnet_membership am
INNER JOIN aspnet_users au ON (au.userid = am.userid)
INNER JOIN aspnet_applications aa ON (au.applicationId = aa.applicationid)WHERE au.username = 'webadmin'
AND aa.applicationname = '/'



h9GkIbUU2XOA+uDdHFJqBFmz6Qs=    1    nRbbbGybfWjhcG3iseVRrQ==



依以上的值再執行storeprocedure 來對其他使用者修改密碼.

DECLARE @changeDate datetime
SET @changeDate = getdate()

EXEC aspnet_Membership_setPassword '/',
'webuser001',
'h9GkIbUU2XOA+uDdHFJqBFmz6Qs=',
'nRbbbGybfWjhcG3iseVRrQ==',
@changeDate,
1

改完後. webuser001 就可以用 xxxx (原webadmin)的密碼來登入了.

2013年12月11日 星期三

忘了WINDOWS 2008 密碼

用 Server 2008 光碟開機
1. 到安裝畫面時先按 [shift} + [f10] 進 命令提示視窗
2. 進到 system32 把 magnify.exe 先備份為 magnify.bak
-> ren magnify.exe magnify.bak
3. 把cmd.exe 替換為 magnify.exe
 -> copy cmd.exe magnify.exe
4. 重開機啟動 Server 2008 在登入時. 點選 協助工具,然後執行 "放大鏡工具"
5. 這時候就會出現一個命令提示視窗 注意!! 權限是 System !!! 這時候就可以改密碼了...
-> ex: net user administrator <password>
6.萬一被停用, 可重新啟用user
 net user administrator /active:yes