programing

매개 변수 접두사 ':' 뒤에는 공백을 사용할 수 없습니다.

muds 2023. 7. 20. 22:13
반응형

매개 변수 접두사 ':' 뒤에는 공백을 사용할 수 없습니다.

문제는 쿼리에 char:가 포함된 텍스트를 삽입하려고 한다는 것입니다.

저는 char 앞에 // 더블 백슬래시를 붙이려고 했지만 여전히 작동하지 않습니다.

ABNORMALLY.java.lang.IllegalArgumentException: 
org.hibernate.QueryException: Space is not allowed after parameter prefix ':' 

INSERT INTO TABLE_A  (A_ID, TYPE_ID, F_ID, REFNO, RECORD) VALUES 
( A_ID_SEQ.nextval, 4 , 9 , 'NY167', q'[LA2010167|SNIP' N CLIP|LMG|1.Unit no\\: 1046, 1 st Floor, Limbang Plaza, 98700 Limbang|2010-12-10||]')

제 경험으로 말씀드리겠습니다.두 가지 시나리오가 있습니다.
쿼리에서 값이 동적으로 설정되는 매개 변수를 지정하려고 합니다.

eg: where user_id = :userId

여기서 "userId"와 동일한 이름으로 매개 변수를 설정하는 경우 문제가 발생하지 않습니다.
값을 타이핑하고 있습니다.

eg: select count(id) :: integer

이 작업을 수행할 때는 이스케이프 문자를 사용해야 합니다. 그렇지 않으면 최대 절전 모드가 매개 변수로 간주됩니다.그리고 "모든 매개 변수가 설정되지 않았습니다"라는 오류가 표시됩니다. 이스케이프 문자를 사용하여 코드를 작성하면 이 문제를 해결할 수 있습니다.

eg:select count(id) \\:\\: integer

그래서 이것이 당신의 문제를 해결할 것입니다.그리고 슬래시를 역방향 슬래시 대신에 슬래시를 잘못 사용하면 "프리픽스 뒤에 공백이 허용되지 않습니다"라는 오류가 표시됩니다.

Wrong: select count(id)//://: integer
Right: select count(id)\\:\\: integer

하지만 저는 당신에게 사용하지 말고 CAST 기능을 사용할 것을 강력히 추천했습니다."::"이 연산자select CAST(count(id) as integer)더 나은 유형 주조 방법이며 오류를 최소화할 수 있습니다.

여기서 최대 절전 모드는 콜론이 있는 하드 코드 값을 포함하는 삽입을 구문 분석합니다.매개 변수를 사용하도록 삽입을 다시 작성하면 최대 절전 모드에서는 문의 일부로 값이 표시되지 않습니다.

저는 스프링 부트를 통해 이 문제를 해결하지 않았고 함수(실제 프로시저)를 만들어 쿼리로 사용했고 문제는 해결되었습니다.

문제는 RECORD 열에 ":"이 포함되어 있기 때문에 Hibernate가 매개 변수 뒤에 대기한다는 것입니다.저도 당신과 같은 문제를 겪었습니다.

언급URL : https://stackoverflow.com/questions/28423741/space-is-not-allowed-after-parameter-prefix

반응형