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

Posted

技术标签:

【中文标题】通过将表名作为参数传递,使用 oracle 中的存储过程从表中搜索数据【英文标题】:Searching data from a table using stored procedure in oracle by passing tablename as a parameter 【发布时间】:2012-02-06 10:24:54 【问题描述】:

此过程无法正常工作。

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: 引用的字符串未正确终止 ORA-06512:在“PENSIONS.BANK_SEARCH_SP”,第 14 行 ORA-06512: 在第 1 行

【问题讨论】:

【参考方案1】:

此行缺少尾随逗号:

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

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

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

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

【讨论】:

以上是关于通过将表名作为参数传递,使用 oracle 中的存储过程从表中搜索数据的主要内容,如果未能解决你的问题,请参考以下文章

存储过程,将表名作为参数传递

将表名作为输入参数动态传递并使用它[重复]

pl/sql 过程不允许将表名/视图名作为参数传递

将表名作为参数传递时 PL/SQL 函数不起作用

在 MySQL 中:如何将表名作为存储过程和/或函数参数传递?

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量