Поиск данных из таблицы с использованием хранимой процедуры в Oracle путем передачи имени таблицы в качестве параметра - PullRequest
0 голосов
/ 06 февраля 2012

Эта процедура не работает должным образом.

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 Ответ

3 голосов
/ 06 февраля 2012

В этой строке отсутствуют запятые:

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

Обратите внимание на 4 запятых в конце фрагмента строки.Первый открывает строку, последний закрывает ее, средние две вставляют одну запятую, которая будет закрывающей запятой для поискового выражения).

Функция UPPER() не нужна;Oracle не заботится о регистре имен объектов.

Я не уверен, что лучшим решением будет наличие нескольких таблиц с одинаковой структурой.Не лучше ли было бы иметь одну таблицу только с индексированным столбцом, показывающим разницу между банками?

...