2010년 11월 30일 화요일

php soap

lighttpd냐 nginx냐 고민하다가 lighttpd로 결정했다. 이유는 nginx는 사용해 보지 않아서...

lighttpd + php5.2 + pear soap으로 서비스를 하는데 pear soap에서 complex type 선언할때

방법을 찾는데 좀 헤맸다.

$this->__dispatch_map['hello'] =  array(  'in' => array('name' => 'string'),  'out' => array('ret' => '{'.$this->__ns.'}ArrayOfIHello'));
$this->__typedef['{'.$this->__ns.'}StringOfHello'] = array( 'a' => 'int', 'b' => 'string', 'c' => 'string', 'd' => 'string', 'e' => 'string' );
$this->__typedef['{'.$this->__ns.'}ArrayOfHello'] = array(array('StringOfHello'=>'{'.$this->__ns.'}StringOfHello'));

요런식으로 선언하면 c# 에서는 StringOfHello 로 받아서 처리하면된다. 편하다 -_-;

aaa.StringOfHello[] strs = svr.hello(tname);
    String[] temp = new String[5];
    foreach (aaa.StringOfHello str in strs)
    {
        temp[0] = str.a.ToString();
        temp[1] = str.b;
        temp[2] = str.c;
        temp[3] = str.d;
        temp[4] = str.e;
        // dataGridView1.Rows.Add(temp);
    }

2010년 7월 7일 수요일

windows7_64 gvim

구입한 노트북의 OS가 windows7_64  버전이다.

gvim을 설치 했더니 우측에 context menu에 추가가 안된다.

추가 방법은 reg 파일을 만들어서 추가하는 것과 sendto를 이용하는 방법이 있다.

reg파일의 내용은

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Edit with Vim]
[HKEY_CLASSES_ROOT\*\shell\Edit with Vim\command]
@="C:\\Program Files (x86)\\Vim\\vim72\\gvim.exe \"%1\""
이 파일을 등록하면 마우스 우측버튼 클릭후에  Edit With Vim이 보인다.

2010년 5월 4일 화요일

oracle to sql server

이 자료는 oracle에서 sql server 2008로 db link를 통해 접속 하는 방법을 설명하는 자료이다.

platform
unbuntu 8.04
Oracle Database 10g r2
MS Sql Server 2008

필요한 package
# apt-get install unixodbc unixodbc-dev tdsodbc
freetds driver를 unixODBC에 인식
# odbcinst -i -d -f /usr/share/tdsodbc/odbcinst.ini
tamplate 생성후 unixODBC에 추가
# vi ms.ini
[MS]
Driver = TDS
Description = SQL Server
Trace = No
Server = 192.168.x.x
Database = test
# odbcinst -i -s -f mydsn.ini -h
또는 /etc/odbc.ini, /etc/odbcinst.ini에 직접 추가
/etc/odbc.ini
[TDS]
Description = freetds
Driver = /usr/lib/odbc/libtdsodbc.so
FileUsage = 1

/etc/odbcinst.ini
[MS]
Driver = TDS
Description = SQL Server
Trace = No
Server = 192.168.x.x
Database = test
접속 테스트
# isql -v MS userid password
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+ 
여기 까지가 unixODBC와 freetds연동을 위한 설정이다. Oracle hs(Heterogeneous Services)를 추가해야 한다.

여기서 부터는 oracle 계정으로 :-)

Oracle listerner 추가(listener.ora)
SID_LIST_HSODBC =
(SID_LIST =
    (SID_DESC =
        (SID_NAME=hsodbc)
        (ORACLE_HOME=/opt/oracle/product/10r2)
        (PROGRAM=/opt/oracle/product/10r2/bin/hsodbc)
        (ENVS=LD_LIBRARY_PATH=/opt/oracle/product/10r2/lib:/usr/lib/) # lib from freetds
    )
) 
 HSODBC =
(DESCRIPTION_LIST =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.x.x)
            (PORT = 1522))
        )
    )
)
tnsnames.ora 추가
hs =
(DESCRIPTION =
    (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.x.x)(PORT = 1522))
    )
    (CONNECT_DATA =
        (ORACLE_HOME = /opt/oracle/product/10r2)
        (SID = hsodbc)
    )
    (HS = OK)
)
listener hsodbc 실행
$ lsnrctl start hsodbc
$ tnsping hs 
Oracle hs 설정
vi $ORACLE_HOME/hs/admin/inithsodbc.ora
HS_FDS_CONNECT_INFO = MS
HS_FDS_TRACE_LEVEL = 4
HS_FDS_TRACE_FILE_NAME = /tmp/ms.trc
HS_FDS_SHAREABLE_NAME = /usr/lib/libodbc.so # lib from unixODBC
set ODBCINI=/etc/odbc.ini
Oracle database link 설정 및 테스트
SQL> create database link ms connect to "userid" identified by "password" using 'hs';
ok
SQL> select * from test@ms;
...
...
...
SQL>
isql로는 연결이 되는데 hs에서는 안 될 경우 환경변수를 확인해보거나 unixODBC와 freetds를 소스로 설치해서 해보길 바란다.

2010년 4월 13일 화요일

oracle merge into

mysql의 replace into 기능을 oracle에서 찾아 봤더니 merge into가 있다.

MERGE INTO table_name alias
USING (table | view | subquery) alias -- 한개의 테이블 사용시 DUAL
ON (join condition) -- WHERE
WHEN MATCHED THEN 
UPDATE SET col1 = val1[, ...] 
WHEN NOT MATCHED THEN 
INSERT (column) VALUES (values);