2012-02-06 132 views
0

此過程無法正常工作。通過傳遞表名作爲參數在oracle中使用存儲過程從表中搜索數據

create or replace procedure bank_search_sp 
(
p_tablename in varchar2, 
p_searchname in varchar2, 
p_bankcode out varchar2, 
p_bankname out varchar2, 
p_dist_code out number 
) 
as 
v_tem varchar2(5000); 
begin 
v_tem :='select bankcode,bankname,dist_code from ' || UPPER (p_tablename) || ' 
where bankname like '''|| p_searchname||''; 
execute immediate v_tem into p_bankcode,p_bankname,p_dist_code using p_searchname ; 
commit; 
end bank_search_sp; 

的程序是越來越創建的,但我不知道什麼時候被執行的實際情況,這是標示

 
ORA-01756: quoted string not properly terminated 
ORA-06512: at "PENSIONS.BANK_SEARCH_SP", line 14 
ORA-06512: at line 1 

回答

3

尾隨逗號是從該行缺少錯誤:

v_tem :='select bankcode,bankname,dist_code from ' || UPPER (p_tablename) || ' 
where bankname like '''|| p_searchname||''''; 

注意字符串片段末尾的4個逗號。第一個打開字符串,最後一個關閉它,中間兩個插入一個逗號,這將成爲搜索表達式的關閉逗號)。

UPPER()函數是沒有必要的; Oracle不關心對象名稱的大小寫。

我不確定是否有多個具有相同結構的表是最好的解決方案。如果只有一張表格指出銀行之間的差異,那麼是不是更好?

相關問題