2017-10-16 59 views
0

我創建一個經典報告(基於功能)用下面的代碼:的Oracle 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'。爲什麼你在任何地方使用綁定變量。在聲明中只使用一次從綁定變量獲取值到局部變量中。對這些變量進行比較。 –

+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:「喬丹」:無效的標識符 –

+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

我得到同樣的錯誤,當我做這個 –