powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Передача значений в функцию! (help!)
3 сообщений из 3, страница 1 из 1
Передача значений в функцию! (help!)
    #32348990
Antava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день !
Есть функция ( в таком виде работает без проблем) , но хотелось бы не привязыватся к имени таблицы (cros). При передаче третьего значения (как тип техт) имя таблицы
функция создается, но при передаче значений выдает ошибку.

CREATE FUNCTION region_to(inet,inet)
RETURNS numeric
AS
'DECLARE
sum_bytes numeric(10,3);
BEGIN
SELECT INTO
sum_bytes trunc((sum(bytes)/1073741824),3)
FROM
cros,ip_region
WHERE
dst_ip in ( $1, $2) and
((cros.src_ip) << inet (ip_region.ip_addr));
RETURN sum_bytes;
END '
LANGUAGE 'plpgsql';
...
Рейтинг: 0 / 0
Передача значений в функцию! (help!)
    #32349061
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже пошаманить надо с EXECUTE. (поищи по форуму - обсуждались аналогичные проблемы с динамич. ссыкулем).

пример передачи в динамик ссыкуль имен-строк в справке к ПГ-админу:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE FUNCTION cs_refresh_mviews() RETURNS integer AS '
DECLARE
    mviews RECORD;
BEGIN
    PERFORM cs_log(''Refreshing materialized views...'');

    FOR mviews IN SELECT * FROM cs_materialized_views ORDER BY sort_key LOOP

        -- Now "mviews" has one record from cs_materialized_views

        PERFORM cs_log(''Refreshing materialized view '' || quote_ident(mviews.mv_name) || ''...'');
        EXECUTE ''TRUNCATE TABLE  '' || quote_ident(mviews.mv_name);
        EXECUTE ''INSERT INTO '' || quote_ident(mviews.mv_name) || '' '' || mviews.mv_query;
    END LOOP;

    PERFORM cs_log(''Done refreshing materialized views.'');
    RETURN 1;
END;
' LANGUAGE plpgsql;
...
Рейтинг: 0 / 0
Передача значений в функцию! (help!)
    #32388377
Guderian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create function test(text) returns integer as'
declare
--имя таблицы
tablename alias for $1;
--набор записей
rec record;
result integer;
begin
/* запрос с использованием имени таблицы, переданного
в качестве аргумента типа text */
for rec in execute ''select count(*) as cnt from ''|| tablename loop
--результат
result:=rec.cnt::integer;
end loop;
return result;
end;
' language plpgsql

Час назад сам опубликовал топик на такую же тему. Премного благодарен
за твое сообщение - навело на мысль. Попробовал на 7.2.2 - все работает. Точно также имена полей можно задавать.
Удачи!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Передача значений в функцию! (help!)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]