차근차근/SQL

oracle -> mysql 변경 에러 1

예쁜꽃이피었으면 2017. 5. 18. 15:55


jsp 프로젝트 두개에서 사용중인 오라클을 mysql 로 바꿔야 한다.

에러가 많이 나올 것 같아서.. 적기 시작.




에러 1

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect parameter count in the call to native function 'decode'

(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : 네이티브 함수 'decode'에 대한 호출에서 잘못된 매개 변수 개수)


-> 로그인을 하면서 DB연동을 하고 계정을 읽어오는데 비밀번호를 읽어오는 과정에서 에러가 나는 것 같다.



오라클 DECODE함수 설명

http://thatisgood.tistory.com/entry/Oracle-DECODE-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95


DECODE함수는 오라클에서만 지원해주는 함수이며, select 문자 내에서 비교연산을 수행하는 함수라고 한다.

DECODE( 컬럼명 , '조건1' , '컬럼명과 조건1이 같았을 때 결과' , '컬럼명과 조건1이 달랐을 때 결과' )

DECODE( 컬럼명 , '조건1' , '컬럼명이 조건1과 같았을 때 값1' , '조건2' , '컬럼명이 조건2와 같았을 때 값2' , 

 '조건3' , '컬럼명이 조건3과 같았을 때 값3' , '조건4' , '컬럼명이 조건4과 같았을 때 값4' , ....)


IF문 같은거네... mysql 로 어떻게 바꾸지..............................



http://stackoverflow.com/questions/18680333/decoding-fields-in-mysql




The MySQL DECODE() function is used for decryption, its signature is:

 DECODE(crypt_str,pass_str)

See the documentation. If you want something equivalent to Oracle's DECODE() function, see:

MySql equivalent of DECODE function in Oracle and Intersystem Cache database

Your query can be rewritten as:

SELECT IF(txn_type = 'Expense', -txn_amount, txn_amount) AS net_amount
WHERE id > 0

or:

SELECT CASE txn_type
            WHEN 'Expense' THEN -txn_amount
            ELSE txn_amount
       END AS net_amount



decode가 mysql 에서는 암호 해독하는 것으로 사용중인데 

오라클과 같이 if문처럼 mysql에서 사용하려면 아래 코드처럼 쓰면된다





반응형