<div>해결했습니다. 우선 기능에 대해서 왜쓰는지 알려드리겠습니다. 너무 길어질꺼 같아서</div> <div>이렇게 글을 다시 쓰게 됬습니다.</div> <div><br></div> <div><br></div> <div>회원, 비회원이 물건을 샀을시 장바구니 테이블에 update 하는 과정이였습니다.</div> <div>예로 들면</div> <div><br></div> <div>회원이 물건을 산다 -> cart_D 테이블에 회원 + 장바구니 pk를 찾아서 삭제 update를 한다.</div> <div>비회원이 물건을 산다 -> be_cart_D 테이블에 비회원 + 장바구니 pk를 찾아서 삭제 update 한다.</div> <div>이과정을 해야 했습니다. pg사 연동후 결제가 완료후에 저 쿼리를 날려야 되는데 결제가 완료되면</div> <div>pg사에서는 주문번호만 날려줍니다. 그렇게 되면 주문번호 하나로 모든걸 해야 합니다.</div> <div>그래서 stored routine을 사용 했습니다. ( 쿼리를 한번 신호에 3~4개씩 동작 시키기 위해 )</div> <div>(call pay_success(); 하면 pay_success에 해당되는 쿼리를 다 발동 시킨다.)</div> <div><br></div> <div><br></div> <div>문제는 비회원, 회원 구분을 해야 했습니다. 그방법을 비회원일때는 회원 pk를 '000000' 회원일 때는 '00001~000xx'로설정 했습니다.</div> <div>이제 조건은 간단합니다.</div> <div><br></div> <div><br></div> <div>회원pk가 000000 일때</div> <div>update be_cart_D set where 회원pk=? and 장바구니pk =?;</div> <div>회원pk가 000000 아닐때</div> <div>update cart_D set where 회원pk=? and 장바구니pk =?;</div> <div>이걸 했어야 했습니다!! 그래서 if문을 물어본거였고요..... 저는 mariasql을 쓰기 때문에 도저히 방법을 떠오르지 않았습니다.</div> <div>그러다가 문뜩 생각한게 tabe명만 다르면 되니깐 tabe명을 변수로 한다면?</div> <div><br></div> <div>바로 검색후 실행했습니다. 아래와 같이하면 </div> <div>select if (@회원pk = '00000', 'be_cat_D', 'cart_D');</div> <div>@회원pk 가 00000(비회원)일때는 'be_cart_D'를 선택 아닐때는 'cart_D' 선택을 했습니다.</div> <div>그럼 다시</div> <div>set @table_name = (select if (@회원pk = '00000', 'be_cat_D', 'cart_D')); </div> <div>// @table_name에 be_cart_D 또는 cart_D가 들어간다.</div> <div>select * from @table_name; 을 했는데 실패... 아 왜 안될까 하다가 멍청하게</div> <div>@table_name은 문자형이기 때문에 ' ' 을 치게 되어 있습니다. 결국</div> <div><br></div> <div>select * from 'be_cart_D' or select * from 'cart_D' 였기 때문에 안된거였습니다...</div> <div>그럼또 검색.... sql 테이블 변수화 검색후 또 알아낸 방법</div> <div><a target="_blank" href="http://www.sqler.com/?mid=bSQLQA&category=128531&page=16&sort_index=readed_count&order_type=desc&document_srl=270956">http://www.sqler.com/?mid=bSQLQA&category=128531&page=16&sort_index=readed_count&order_type=desc&document_srl=270956</a></div> <div>declare @tablename varchar(50)</div> <div>declare @sqltext varchar(max)</div> <div> </div> <div>set @tablename='상품'</div> <div>set @sqltext='update '+@tablename + ' set 상품명= ''C'''</div> <div>exec (@sqltext)</div> <div><br></div> <div>쿼리자체를 문자형으로 쓴후 exec()로 문자된 쿼리를 실행이였습니다. 바로 헀지만 실패 이번에는 검색을</div> <div>mariasql exec 후</div> <div><a target="_blank" href="https://mariadb.com/kb/en/mariadb/prepare-statement/#example">https://mariadb.com/kb/en/mariadb/prepare-statement/#example</a></div> <div>PREPARE stmt FROM 'SELECT @x;';</div> <div><br></div> <div>SET @x = 1;</div> <div><br></div> <div>EXECUTE stmt;</div> <div>예제를 보고 어떤 형식인지 이해하고 다시 도전 </div> <div>set @table_name = 'cart_D'</div> <div>set @sql = 'select * from' + @<span style="font-size:9pt;line-height:1.5;">table_name;</span></div> <div><span style="font-size:9pt;line-height:1.5;">select </span><span style="font-size:9pt;line-height:1.5;">@sql; 하는데 자꾸 0만 출력;; 아 뭐지... char 랑 char끼리는 더하기 가 안되나?싶어서 혹시몰라</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div> <div>set @table_name = 'cart_D'</div> <div>set @sql = 'select * from' + cast(@<span style="font-size:9pt;line-height:1.5;">table_name as char); // 이렇게 강제 type을 char로 바꾸고 출력했는데도 0이 출력...</span></div></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div>아 너무 힘들다 라고 생각하다가 CONCAT()을 알아냈습니다.</div> <div> <div>set @table_name = 'cart_D'</div> <div>set @sql = <span style="font-size:9pt;line-height:1.5;">CONCAT('select * from ', @table_name);</span></div> <div><span style="font-size:9pt;line-height:1.5;">select </span><span style="font-size:9pt;line-height:1.5;">@sql; 를 해보았는데 다행시</span></div></div> <div>'select * from cart_D' 란 텍스트를 가져 왔습니다. 이제 여기서 아까 검색한걸 붙여서</div> <div><br></div> <div> <div>set @table_name = 'cart_D'</div> <div>set @sql = <span style="font-size:9pt;line-height:1.5;">CONCAT('select * from ', @table_name);</span></div></div> <div> <div>PREPARE stmt FROM @sql</div> <div>EXECUTE stmt; 하는 순간 </div></div> <div>'select * from cart_D' 로 만든 텍스트가 select * from cart_D의 쿼리로 실행!! 아..됐다 싶어서....</div> <div>위에 이용한 if로 be_cart_D 나 cart_D를 선택후 <span style="font-size:9pt;line-height:1.5;">CONCAT(); 를 이용하여 쿼리를 완성 시켰습니다.</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div>어떤 쿼리를 어떻게 짯는지해 대해서는 회사 DB라서 자세히는 말할순 없지만ㅠㅠ.. 그래도 댓글에 조언으로 </div> <div>검색 키워드를 잘 따라왔고 영감을 얻어서 잘 해결했습니다 조언주신분들 감사합니다.</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.