'SEQUENCE'에 해당되는 글 2건

  1. 2008.11.28 Oracle Sequence 만들기
  2. 2008.11.28 iBatis SEQUENCE 가져오기
SQL
posted by 준치 2008. 11. 28. 16:53

 

CREATE SEQUENCE MYSQ INCREMENT BY 1 START WITH 10000;"

시퀀스라는 것은 자동 증가 칼럼을 만들 때 사용한다.

 

SQL> CREATE TABLE SQTEST 2> (SQ_ID NUMBER, 3> SQ_NAME VARCHAR2(20));  

SQL> CREATE SEQUENCE MYSQ INCREMENT BY 1 START WITH 10000;  

 

CREATE SEQUENCE 라는 문장을 사용하여 MYSQ라는 이름의 시퀀스를 만들었다.  

INCREMENT BY 1 자동 증가 칼럼의 증가치가 1이고,  

START WITH 10000 자동 증가 칼럼이 10000부터 증가한다는 뜻이다.  

 

SQL> INSERT INTO SQTEST VALUES(MYSQ.NEXTVAL,'홍길동');  

SQL> SELECT * FROM SQTEST;

 

SQ_ID SQ_NAME

--------------------- ---------------------------------------------

10000 홍길동

 

SQL> INSERT INTO SQTEST VALUES(MYSQ.NEXTVAL,'고길동');

 

SQ_ID SQ_NAME

--------------------- ---------------------------------------------

10000 홍길동

10001 고길동

 

SQL> DELETE FROM SQTESET WHERE SQ_NAME='고길동';

 

SQ_ID SQ_NAME

--------------------- ---------------------------------------------

10000 홍길동

 

SQL> INSERT INTO SQTEST VALUES(MYSQ.NEXTVAL,'홍제동');

SQL> SELECT * FROM SQTEST;

 

SQ_ID SQ_NAME

--------------------- ---------------------------------------------

10000 홍길동

10002 상도동

 

원본 위치 <http://blog.daum.net/_hdn/blank_article.html>

posted by 준치 2008. 11. 28. 16:51

iBatis에서 데이터 삽입방법은 인라인이나 파라미터맵으로 할수 있다.

=================================================================================
인라인법은 아래처럼 #value#를 써서 바로 이용하는것이고..
 <insert id="insert_inline">
  INSERT INTO
   USER_ACCOUNT
    (USERNAME, PASSWORD, GROUPNAME)
   VALUES
    (
     #USERNAME:VARCHAR#,
     #PASSWORD:VARCHAR#,
     #GROUPNAME:VARCHAR#
    )
 </insert>

=================================================================================
파라미터맵은 따로 개체에 해당하는 파라미터부분을 설정해서 이용하는것이다.
iBatis가 SQL을 분석하는것이 아니기 때문에 ? 와 파라미터맵은 순서가 같아야 한다.
즉,,,순서가 중요..

 <parameterMap id="parametermap_insert" class="Account">
  <parameter property="USERNAME" jdbcType="VARCHAR" />
  <parameter property="PASSWORD" jdbcType="VARCHAR" />
  <parameter property="GROUPNAME" jdbcType="VARCHAR" />
 </parameterMap>

 <insert id="insert_parametermap" parameterMap="parametermap_insert">
  INSERT INTO
   USER_ACCOUNT
    (USERNAME, PASSWORD, GROUPNAME)
   VALUES
    (?, ?, ?)
 </insert>

=================================================================================
삽입시 시퀀스(오라클)나 identity(MSSQL) 또는 auto_increment(MYSQL)일때
아래처러 selectKey를 이용하면 입력된 데이터의 KEY를 얻을수 있다.
SQL에서 시퀀스를 어떻게 이용하냐에 따라서 selectKey를 위에 두거나, 아래에 두는것을 결정한다.
selectKey가 위에 있는경우 - selectKey를 먼저 수행후 발급된번호를 변수에 두고 SQL에서 발급된 값을 이용
selectKey가 아래에 있는경우 - SQL수행시 시퀀스를 발급하고 발급된 번호를 selectKey를 통해서 가져옴
 <insert id="insert_inline">
  INSERT INTO
   USER_ACCOUNT
    (USERNAME, PASSWORD, GROUPNAME)
   VALUES
    (
     #USERNAME:VARCHAR#,
     #PASSWORD:VARCHAR#,
     #GROUPNAME:VARCHAR#
    )
  <selectKey keyProperty="USERID" resultClass="int">
   SELECT LAST_INSERT_ID()
  </selectKey>
 </insert>

시퀀스 값 얻기
oracle - nextval(#sequence#)
mssql - SCOPE_IDENTITY()
mysql - LAST_INSERT_ID()

=================================================================================
삭제도 비슷하다.

 <delete id="delete_inline" parameterClass="int">
  DELETE FROM USER_ACCOUNT WHERE USERID = #value#
 </delete>

=================================================================================
업데이트도 비슷.. -_-

 <parameterMap id="parametermap_update" class="Account">
  <parameter property="USERNAME" jdbcType="VARCHAR" />
  <parameter property="PASSWORD" jdbcType="VARCHAR" />
  <parameter property="GROUPNAME" jdbcType="VARCHAR" />
  <parameter property="USERID" jdbcType="NUMBER" />
 </parameterMap>

 <update id="update_inline" parameterMap="parametermap_update">
  UPDATE USER_ACCOUNT SET USERNAME=?, PASSWORD=?, GROUPNAME=? WHERE USERID=?
 </update>