이브
415
2017-07-04 16:18:03 작성 2017-07-04 16:35:42 수정됨
19
1899

[초보] SQL문 질문 드립니다... // 수정


현재 만들고 있는 내용에 동시에 두개의 행을 입력해야 하는 경우가 있습니다.

문제가... 단순히 insert문을 돌리면, 마지막 행의 자료만 insert 되기 때문에 반복문이 필요한데요.


찾아보니... insert+select문은 한개의 테이블에서 다른 테이블에 복사를 하는거고...

반복문을 쓰는 거 같은데 잘 모르겠네요...


입력 form

	<tbody>
		<tr class="protoRow">
			<td>row #1</td>
			<td><input type="text" name="TRK_NUM" /></td>
			<td><input type="text" name="TRK_ORG" /></td>
			<td><input type="text" name="TRK_DES" /></td>
			<td><input type="text" name="TRK_PKG" /></td>
			<td><input type="text" name="TRK_DLV" /></td>
			<td><input type="text" name="TRK_DONE" /></td>
			<td><button type="button" class="addRow">+</button></td>
			<td></td>
		</tr>
	</tbody>

이 form을 jquery를 이용해서 여러 개 복사하는 구조입니다.


실행화면


이런식으로 row가 늘어나고, 이 데이터를 insert하는 방법이 궁금합니다.


SQL

INSERT (TRK_IDX, TRK_DATE, TRK_NUM, TRK_PKG, TRK_ORG, TRK_DES, TRK_DLV, TRK_DONE, SHPT_IDX)
	VALUES (SEQ_IDX.NEXTVAL, SYSDATE, #{TRK_NUM}, #{TRK_PKG}, #{TRK_ORG}, #{TRK_DES}, #{TRK_DLV}, #{TRK_DONE}, #{SHPT_IDX})


이게 제가 만들려는 SQL문인데 어떻게 해야 할지 조언 부탁 드립니다..(힌트라도 ㅠㅠ)



0
0
  • 답변 19

  • ....
    2017-07-04 16:22:38

    두번 실행하면 되지않나요?

    sql구문만 두번 쓰신거 아닌지 확인해보세요

    0
  • 이브
    415
    2017-07-04 16:33:51

    신입 님, 제 질문이 좀 모호했네요.


    	<tbody>
    		<tr class="protoRow">
    			<td>row #1</td>
    			<td><input type="text" name="TRK_NUM" /></td>
    			<td><input type="text" name="TRK_ORG" /></td>
    			<td><input type="text" name="TRK_DES" /></td>
    			<td><input type="text" name="TRK_PKG" /></td>
    			<td><input type="text" name="TRK_DLV" /></td>
    			<td><input type="text" name="TRK_DONE" /></td>
    			<td><button type="button" class="addRow">+</button></td>
    			<td></td>
    		</tr>
    	</tbody>


    위의 코드를 jquery로 복사해서 아래처럼 만들었습니다.



    이런식으로 반복이 되는 구조기 때문에 fk 값인 SHPT_IDX가 동일한 여러개의 row가 있습니다.


    이 자료를 insert하는 방법을 찾기 위해 질문 드린 것이라서 row가 늘어 날 경우에 해결이 안돼요 ㅠㅠ

    0
  • ....
    2017-07-04 16:35:29

    왜 두번 입력해야되나요?

    0
  • 이브
    415
    2017-07-04 16:38:35

    신입 님, TRK라는 테이블이 SHPT 테이블의 아래(?)에 있는 테이블입니다.

    SHPT 테이블 안에 여러개의 TRK 자료가 연결되는 구조라서 그렇게 만들고 있어요.


    SHPT_IDX = 01 값에 연결되는 TRK_IDX는 01, 02, 03... 이런식으로 구성하려고 합니다.


    TRK에 들어가는 자료가 단순하기 때문에,

    사용자 편의를 생각해서 한번에 여러개 입력 할 수 있도록 하는거구요.

    0
  • ....
    2017-07-04 16:41:08

    다른 테이블이죠?

    0
  • 이브
    415
    2017-07-04 16:54:40

    신입 님, SHPT와 TRK는 다른 테이블입니다~

    0
  • ....
    2017-07-04 17:08:40

     row가 늘어난다는 것이 이해가 안되네요

    0
  • gilddon
    4
    2017-07-04 17:31:56

    SQL 문을 이렇게 하면 안되는지요....

    INSERT INTO dbo.Departments 
        VALUES (1, 'Human Resources', 'Margheim'),(2, 'Sales', 'Byham'), 
               (3, 'Finance', 'Gill'),(4, 'Purchasing', 'Barber'),
               (5, 'Manufacturing', 'Brewer');

    https://technet.microsoft.com/en-us/library/ms187905(v=sql.105).aspx

    0
  • ....
    2017-07-04 17:35:18

    INSERT INTO table(x,y,z) VALUES(1,2,3),VALUES(4,5,6)

    이런 식으로 해야된다고 하네요

    0
  • 0108
    250
    2017-07-04 17:41:43

    개발중이신 환경이 어떤지 모르겠지만

    MVC 모델이고 저 input text 타입의 데이터가 form 안에 있다면

    name이 같을경우 submit 하면 배열로 값이 넘어갈 것입니다.


    service 쪽에서 배열로 받아서 TRK_NUM의 배열 사이즈 만큼 

    (TRK_ORG, TRK_DES, 이것들의 배열 사이즈는 같을것이라고 판단하고)

    루프를 돌려 insert 하는 방법도 있을 것 같습니다.


    0
  • 이브
    415
    2017-07-04 18:03:20

    gilddon 님, 네 말씀하신 부분이 맞는데요. 문제는 row 갯수가 여러개로 늘어 나는 구조기 떄문입니다.

    상황을 말씀 드리면, (제 본 직업 관련이라 내용이 이해가 안되실수도...)


    한 번의 운송이 진행 될 때(SHPT 테이블), 그 운송 건에 여러 대의 트럭(TRK 테이블)이 사용 됩니다.

    그 때 TRK의 댓 수는 정해져 있는 것이 아니기 때문에 row를 늘려서 입력 하려는거구요.

    외래키인 TRK.SHPT_IDX는 하나인데 같은 name값을 갖는 row가 여러 개가 되는 구조입니다.


    그러다보니 SQL문이 각 row별로 수행이 되어야 하는 거고,

    그 횟수는 상황마다 다른거라서 난감한 상황입니다. 검색어도 모르겠네요 ㅠㅠ

    0
  • 이브
    415
    2017-07-04 18:04:43

    신입 님, 제가 설명이 정말 부족한가봐요 ㅠㅠ...

    위에 적은 것 처럼 row의 수가 정해져 있지 않기 때문에 알려주신 방법으로는 해결이 어려운 상황입니다.

    0
  • 이브
    415
    2017-07-04 18:06:24 작성 2017-07-04 18:08:12 수정됨

    jwkim0486 님,

    개발 환경은 spring+oracle 입니다.

    말씀하신 루프(반복문 말씀이시죠?) 방법을 찾아보도록 하겠습니다.

    구글링 하다가 보긴 했는데 ㅠㅠ 어렵더라구요 ㅠㅠ..

    혹시 조언을 좀 부탁 드려도 될까요..?

    0
  • ....
    2017-07-04 18:07:47

    아 그말인가요?ㅋㅋㅋ

    저 여러개의 input을 입력하면 그 만큼의 insert가 나오게 하면 되는 건가요?


    그렇다면 각각의 name을

    예를 들면

    <input name="text[]">

    이런식으로 하면

    text에 대한 배열로 전달 받아집니다.


    인덱스를 넣어서 for로 반복문 돌려보세요

    0
  • 이브
    415
    2017-07-04 18:15:54

    신입 님, 감사합니다. 말씀하신 방법이 맞는 것 같아요 ㅎㅎ;;


    문제는 제가 그걸 구현 하는 능력이 없다는게..

    정확하게는 for로 반복문 돌린다는 말은 알겠는데, 말씀만 알아들을 뿐이네요;;


    혹시 for로 반복문 돌린다는 부분을 조금만 더 설명 해 주실 수 있을까요..?

    0
  • ....
    2017-07-04 18:20:08

    음 태그를 

    <tbody> <tr class="protoRow"> <td>row #1</td> <td><input type="text" name="TRK_NUM[]" /></td> <td><input type="text" name="TRK_ORG[]" /></td> <td><input type="text" name="TRK_DES[]" /></td> <td><input type="text" name="TRK_PKG[]" /></td> <td><input type="text" name="TRK_DLV[]" /></td> <td><input type="text" name="TRK_DONE[]" /></td> <td><button type="button" class="addRow">+</button></td> <td></td> </tr> 

    </tbody>


    위 처럼 []를 포함한 name으로 변경해주시고요

    <input type="hidden" name="num" value="2">

    이렇게 몇개인지도 같이 넘겨주세요


    인덱스는

    TRK_DONE[0] 하면 첫번째 TRK_DONE값

    TRK_DONE[1] 하면 두번째 TRK_DONE값이 나옵니다.


    화면에 값을 확인하시면서 쿼리를 만들어보세요 ㅎㅎ


    0
  • 이브
    415
    2017-07-04 18:25:36

    신입 님 감사합니다. 알려주신 방법으로 도전해 보겠습니다 ^^

    0
  • ....
    2017-07-04 18:29:07

    네 이브님ㅎㅎ

    0
  • JamdoL
    363
    2017-07-04 18:43:17

    가장 간편한 방법으로는

    form 태그를 테이블 밖으로 꺼내서 테이블 전체를 감싸고

    input의 name이 중복되게 동적으로 여러개의 input을 생성하시면

    form데이터 전송시

    a = a,b,c,d 이런식으로 콤마가 찍혀서 하나로 전송됩니다

    이걸 ,를 구분자로 split 하시면 배열객체가 반환되요

    배열객체를 이용해 반복문을 돌리시거나 쿼리를 작성하는건 어떠세용

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.