IF 문


형식 : if ( 조건문, 참일때 값, 거짓일때 값)

EX)  select member_id, if ( isnull(birthday), '-', birthday ) from member

설명 - 멤버 테이블에서 아이디(member_id) 와 생일을 뽑는데 null 일경우는 - 를 출력, 

      아니면 생일을 출력

 

 

Case 문


형식 :  case (조건 또는 값)

          when 값1 then 표시값

          when 값2 then 표시값

        else 표시값

        end

EX)   select case a when '1' then a when '2' then b else c end from table_name

설명 - a 값이 '1'이면 a, '2' 이면 b, 둘다 아닐경우 c 를 출력

 

 

ifnull문 ( mysql 에서 사용 )


 형식 : ifnull ( 값1, 값2)

EX ) select ifnull ( price, 0 ) from books

설명 - price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력

 

 

isnull문 ( MS-SQL 에서 사용 )


 형식 : ifnull ( 값1, 값2)

EX ) select isnull ( price, 0 ) from books

설명 - price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력

 

 

NVL문 ( Oracle 에서 사용 )


 형식 : NVL ( 값1, 값2) 

EX ) select nvl ( price, 0 ) from books

설명 - price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력




                                                                                                     



%% OPENQUERY : 원격 DB 서버에서 데이터를 가지고 오는 것


-- 원격 서버의 DB (OpenQuery)
-- WHERE 조건은 OpenQuery 안에 넣어서 처리하는 것이 최적화가 쉽다.


Select

SELECT * FROM OPENQUERY([ip], 'SELECT * FROM table WHERE ');


Insert

INSERT OPENQUERY(L_TESTDB, 'SELECT * FROM table WHERE  ') VALUES (1, '홍길동');


Update

UPDATE OPENQUERY(L_TESTDB, 'SELECT * FROM table WHERE ') SET NAME = '홍길동';


Delete

DELETE FROM OPENQUERY(L_TESTDB, 'SELECT * FROM table WHERE ');


-- 로컬 서버의 DB (Linked Server) SELECT * FROM [192.168.0.1].[데이터베이스].dbo.[테이블] WHERE no < 101; -- 로컬 서버의 DB (Linked Server) SELECT * FROM [데이터베이스].dbo.[테이블] WHERE no < 101;



                                                                                                     


%% DECLARE : 쿼리 내에 변수 선언

 Set : 변수 초기화

 Exec : 실행


Declare @strQuery varchar(1024)

Declare @no char(6) = '001553'

 

Set @strQuery = 'SELECT * FROM Openquery(

    [192.168.0.1], '''

    + ' SELECT id FROM [데이터베이스].dbo.[테이블] WHERE no = '''+ @no +''' '

    + ''')'

--Exec SP_EXECUTESQL @strQuery

Exec (@strQuery);

  

Set @no varchar(100) = '2,4'

Set @strQuery = 'SELECT * FROM Openquery(

    [192.168.0.1], '''

    + ' SELECT * FROM [데이터베이스].dbo.[테이블] WHERE no in ('+ @no +') '

    + ''')'

Exec (@strQuery);



출처 : http://tofriendy.tistory.com/26

출처 : SPATIUM


JAVA구현 코드 보단 python 코드로 구현한 것을 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
         try:
     
              conn = db_connPool(cfg)     #cfg는 configuration을 의미
              __LOG__.Trace("DB connected")
     
              #cursor = None
     
              #transaction
     
              conn.autocommit = False    #autocommit을 꺼준다.
              cursor = conn.cursor()
              strSql = cfg.get('DB','sql_insert') % params
              cursor.execute(strSql)
              __LOG__.Trace("Inserted!")
     
          except Exception as e:
              conn.rollback()            #Exception발생 시 rollback을 통해 되돌아간다.
              __LOG__Trace("insert Error : %s" % e)
     
          finally:
              conn.commit()                #정상적으로 insert가 이루어지면 commit하여 DB에 반영한다.
              if cursor:
                  cursor.close()
              if conn:
                  conn.close()
 
cs


오라클에서 insert문을 사용하는 메소드에서 int변수를 사용하지 않고 Integer변수를 사용하는 이유

★ 오라클에서 insert문을 사용하는 메소드에서 int변수를 사용하지 않고 Integer변수를 사용하는 이유
        --> insert문의 결과가 없거나 실패할 경우 null값을 리턴받기 위해. int변수를 사용하면 실패하는 경우 리턴되는 값이 없기 때문.



numbering된 sequence 값을 바로 받아 오는 법

Oracle에서 사용

preparedStatement의 생성자중 (sql, String columnName)사용
PreparedStatement ps = conn .prepareStatement(sql, new String[]{"bno" });
ResultSet rs = ps.getGeneratedKeys();
           if(rs .next()){
               bno = rs.getInt(1);
          }

자동 생성된 키를 return해라

Mysql(MsSQL Server)에서 사용
PreparedStatement ps = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);


+ Recent posts