Я получаю неправильный счет из запроса, выполненного внутри хранимой процедуры. Когда мы выполняем тот же запрос (после жесткого кодирования значений имени таблицы и имени схемы), он дает правильный результат.
Предварительный анализ указывает на то, что запрос по какой-либо причине выполняется внутри хранимой процедуры. игнорирование второго фильтра (т. е. где ... и ..., вторая часть игнорируется).
CREATE OR REPLACE PROCEDURE dev.gp_count (tablename VARCHAR(256))
AS
$$ DECLARE schema_name VARCHAR(64);
table_name VARCHAR(128);
check_count_1 INT;
check_count_2 INT;
BEGIN
schema_name:= SPLIT_PART(tablename,'.',1);
table_name:= SPLIT_PART(tablename,'.',2);
check_count_1 := (select count(*) from information_schema.tables where table_schema = schema_name and table_name like '%' + table_name +'%');
raise info 'check_count_1 - %',check_count_1;
end;
$$
language plpgsql;
И вызов вышеуказанной процедуры как-
call dev.gp_count ('dev.gp_test1');
Результатполученная из хранимой процедуры: - Предупреждения: check_count_1 - 925
Если мы запустим тот же запрос после подстановки значений для имени таблицы и схемы, то -
select count(*) from information_schema.tables where table_schema = 'dev' and table_name like '%gp_test1%';
RESULT -
count
3
Теперь продолжаем исследовать проблему -
Число, полученное с помощью хранимой процедуры, совпадает с числом, полученным с помощью этого запроса -
select count(*) from information_schema.tables where table_schema = 'dev';
РЕЗУЛЬТАТ -
count
925
Моя догадка -
Таким образом, это указывает на то, что, возможно, внутри хранимой процедуры второе условие фильтра игнорируется.
Помимо помощи мне соИз других альтернатив, пожалуйста, помогите мне найти причину этой аномалии.
Заранее спасибо.