Я бегу km_test.sql из BAT-файла (Windows 7):Как передать переменную в Funtion в PostgreSQL
call psql -h ... -U ... -d ... -f C:\svn\tre2\prog\km_test.sql -v nrl=%a%
где% в% представляет собой целое число. Я работаю на PostgreSQL 9.5.
km_test.sql выглядит следующим образом
\set n :nrl
DROP FUNCTION km_test(integer);
CREATE FUNCTION km_test(n integer)
RETURNS void AS
$BODY$
DECLARE
j smallint;
BEGIN
DROP TABLE IF EXISTS km_test CASCADE;
CREATE UNLOGGED TABLE km_test (
lnr smallint,
km_id character varying(16),
flatenr smallint,
geo geometry(Linestring,25833)
);
j = 1;
WHILE j < n+1 LOOP
RAISE NOTICE 'Verdi j er : %', j;
INSERT INTO km_test (lnr, km_id, flatenr, geo)
SELECT d.i,
p.km_id,
CAST(substring(p.flatenr from 5 for 4) AS smallint),
ST_MakeLine(p.geo,(ST_Translate(p.geo, d.dx, d.dy)))
FROM org_tre2.km_punkter_des2016 AS p, org_tre2.km_dxdy1 AS d
WHERE j = d.i;
j = j + 1;
END LOOP;
COMMENT ON TABLE org_tre2.km_test IS 'KM innsyn: n innsynslinjer for kulturminnepunkt utenfor IK i tre2-flater';
END;
$BODY$
LANGUAGE plpgsql;
\set tab 'org_tre2.km_punkter_des2016'
select km_test(:n);
Вопрос: Как сделать таблицу р (org_tre2.km_punkter_des2016) быть входным параметром? Значение того, как включить имя_таблицы в вызов функции (с помощью select km_tull (: n,: p)) и обратиться к этой таблице в функции?
CREATE FUNCTION km_test(n integer, t text)
...
select km_test(:n,:'tab')
До сих пор мне не удалось ссылаться на входную таблицу как t-переменную в операторе FROM. Возможно ли это? Или есть обходной путь?
Ознакомьтесь с динамическими командами. https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN – McNets
Спасибо за ссылку @mcNets. Кажется, я понял это. – 9ls1
Добро пожаловать. – McNets