mybatis에서 DECLARE BEGIN 사용방법 질문드립니다.

11,936 views
Skip to first unread message

안장우

unread,
Jan 3, 2017, 11:00:46 PM1/3/17
to Korea Spring User Group Q&A
오라클DB에서 아래와 같이 작성해서 정상작동하고있습니다.

<update id="updateInformation" parameterType="HashMap">
DECLARE
NAME VARCHAR(60) default '';
COUNTRY VARCHAR(50) default '';
BEGIN
SELECT COMPANY_NM
.
생략
.
;
UPDATE CO_PARTY
SET .
생략
.
;
END;
</update>



그런데 업무상 환경을 MariaDB 로 변경했는데
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DECLARE

라고 에러가 뜹니다.

mysql에서는 위처럼 사용을 못하나요?

최종명

unread,
Jan 4, 2017, 2:19:34 AM1/4/17
to ks...@googlegroups.com

https://mariadb.com/kb/en/sql-99/begin-end-compound-statement/

쓰는방식이 좀 다른거 같네요


2017. 1. 4. 오후 1:00에 "안장우" <hana...@gmail.com>님이 작성:
--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+unsubscribe@googlegroups.com에 이메일을 보내세요.
https://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/fd35b43e-4c09-42c3-a579-67d39510f0e3%40googlegroups.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

doohwan Jang

unread,
Jan 4, 2017, 3:56:30 AM1/4/17
to Korea Spring User Group Q&A
프로시져로 만들어서 호출하셔야 합니다.

2017년 1월 4일 수요일 오후 1시 0분 46초 UTC+9, 안장우 님의 말:

doohwan Jang

unread,
Jan 4, 2017, 3:59:22 AM1/4/17
to ks...@googlegroups.com
쿼리툴에서 CREATE PROCEDURE으로 만든 후 mapper에서 프로시져 호출해야 될 것 같습니다.

2017년 1월 4일 오후 5:56, doohwan Jang <jangd...@gmail.com>님이 작성:

--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+unsubscribe@googlegroups.com에 이메일을 보내세요.
https://groups.google.com/group/ksug에서 이 그룹을 방문하세요.

kihwan cheon

unread,
Jan 4, 2017, 9:14:59 AM1/4/17
to ks...@googlegroups.com
안녕하세요.

질문에 짧게 답하자면 '네 사용하지 못합니다'
좀더 길게 답하면, 'MariaDB(MySql)용 문법으로 바꿔서 사용하셔야합니다.'
(참고 : http://dev.mysql.com/doc/refman/5.7/en/user-variables.html)

각 RDBMS 별로 쿼리하는 문법이 약간씩 상이한 부분이 있습니다. 질문하신 부분은 ANSI 표준도 아니고.. 오라클
PL/SQL 쪽 문법이 더 많이 들어가 있습니다. DECLARE 같은 선언부는 MySql에 없는 것으로 알고 있습니다.

오라클의 PL/SQL, MSSQLServer의 TSQL 과 같은 프로그래밍 요소들은 각각 제조사 별로 다르기 때문에
MariaDB나 MySql에서 메뉴얼이나 문법을 확인하시고 사용하시는 것이 좋습니다.

질문에 답이 되셨길 바라며.. 새해 복 많이 받으세요~

2017년 1월 4일 오후 5:59, doohwan Jang <jangd...@gmail.com>님이 작성:
>> 이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을
>> 보내세요.
>> https://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
>> 웹에서 이 토론을 보려면
>> https://groups.google.com/d/msgid/ksug/ae25157f-e4d3-42c2-8a2e-c4813666b6a8%40googlegroups.com을(를)
>> 방문하세요.
>>
>> 더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.
>
>
> --
> 이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
> 이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
> https://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
> 웹에서 이 토론을 보려면
> https://groups.google.com/d/msgid/ksug/CAJwm8i_DFqNeaMpCyvQ_hU61HQ0Zh8YW626WrPWCfjMdddzXQw%40mail.gmail.com을(를)

최종명

unread,
Jan 4, 2017, 8:32:27 PM1/4/17
to Korea Spring User Group Q&A

안장우

unread,
Jan 5, 2017, 2:44:27 AM1/5/17
to Korea Spring User Group Q&A
답변해주신 세분의 도움으로 해결했습니다.

정말 감사합니다.

기록을 남기고자 합니다.


-------------------------------------Oracle Mybatis------------------------------------
declare로 S_NAME을 선언한뒤 아래 SELECT 구문의 INTO로 값을 설정해주고, 설정된 S_NAME값으로 UPDATE하는 쿼리였습니다.


<update id="updateInformation" parameterType="HashMap">
DECLARE
S_NAME VARCHAR(60) := '';
BEGIN
SELECT COMPANY_NM,
.
.
.
INTO
S_NAME,
.
.
.
;

UPDATE CO_PARTY
SET COMPANY = S_NAME,
.
.
.
;
END;
</update>



-------------------------------------MySQL(MariaDB) Mybatis------------------------------------
declare가 없으므로 @변수 := 값  으로 설정해주어 진행하였습니다.


<update id="updateInformation" parameterType="HashMap">
SELECT @S_NAME := COMPANY_NM
.
.
.
;

UPDATE CO_PARTY
SET COMPANY = @S_NAME,
.
.
.
;

</update>





위와 같이 처리하여 오류없이 실행되었습니다.

추후 해당 쿼리로 인해 다른문제 발생하면 업데이트 하겠습니다.


다시한번 답변달아주신 세분께 감사드립니다!
Reply all
Reply to author
Forward
0 new messages