通过将表名作为参数传递,使用oracle中的存储过程从表中搜索数据

时间:2012-02-06 10:24:54

标签: oracle plsql oracle9i ora-06512 ora-01756

此过程无法正常运行。

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 

1 个答案:

答案 0 :(得分:3)

此行中缺少尾随逗号:

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

注意字符串片段末尾的4个逗号。第一个打开字符串,最后一个关闭它,中间两个插入一个逗号,它将是搜索表达式的结束逗号。

UPPER()功能不是必需的; Oracle并不关心对象名称的大小写。

我不确定具有相同结构的多个表是否是最佳解决方案。如果一个表只有一个表示银行之间差异的索引列,那不是更好吗?