2017-10-16 11 views
0

나는 다음과 같은 코드로 (기능에 따라) 클래식 보고서를 만드는 오전 :오라클 APEX 오류 ORA-01460 ORA-02063

declare 
    q long; 
begin 
-- The query with any conditions always applied 
    q := 'select * from name_selection_atnd where 1 = 1'; 

-- If all items are null then kill query 
if :P500_FN is null 
    and :P500_LN is null 
then 
    q := q || ' and name_said = 0'; --will always return 0 rows 
end if; 

-- Append any optional conditions 
if :P500_FN is not null then 
    q := q || ' and name_first_name = :P500_FN'; 
end if; 

if :P500_LN is not null then 
    q := q || ' and name_last_name = :P500_LN'; 
end if; 

return q; 
end; 

내 마지막 코드는 첫 번째와 마지막 외에 검색하기 위해 더 많은 항목을 포함해야합니다 이름이지만 지금은이 두 매개 변수로 테스트하고 있습니다. 이름 만 입력하면 검색이 작동합니다. 성을 채울 때만 작동합니다. 첫 번째 성을 입력하면 ORA-01460 및 ORA-02063 오류가 발생합니다.

내가 잘못 할 수 있습니까?

+0

'P500_FN'에 무엇을 입력하고 있습니까? 왜 어디서나 바인드 변수를 사용하고 있습니까? declare에서 한 번만 사용하여 바인드 변수에서 로컬 변수로 값을 가져옵니다. 그 변수들에 대한 비교를해라. –

+0

문자열을 입력하고 있습니다. 그냥 사람의 첫 번째 이름 –

+0

코드가 아닌 전체 오류 메시지를 줄 수 있습니까? – MT0

답변

1
난 당신이 bind PLSQL 블록에서 평가하지 않을 것이다 '' 내부 변수를 사용하는 것을 볼 수 있습니다

:

q := q || ' and name_first_name = :P500_FN'; 

이 이렇게되어야한다 :

q := q || ' and name_first_name = '||:P500_FN; 
+0

좋아요! 그러나 요르단과 같은 이름을 입력하면이 오류가 발생합니다. ORA-00904 : "JORDAN": 유효하지 않은 식별자 –

+0

@JordanHolmer'Jordan'을 문자열로 전달해야하므로 'Jordan'에 있어야합니다. 너는 그것을 전달한다. 값을 전달할 때 작은 따옴표 (')를 포함해야합니다. – XING

+0

감사합니다! 나는 지금 일하고있어. –

0

당신은 동적 SQL을 필요로하지 않습니다

SELECT * 
FROM name_selection_atnd 
WHERE (:P500_FN IS NULL OR name_first_name = :P500_FN) 
AND (:P500_LN IS NULL OR name_last_name = :P500_LN) 
AND (:P500_FN IS NOT NULL OR :P500_LN IS NOT NULL); 
+0

이 작업을 수행 할 때도 같은 오류가 발생합니다. –