1
に目的球内の変数を転送します。私はPostgreSQL 9.5で動作しています。はどのようにバットファイル(Windows 7)から<strong>km_test.sql</strong>を実行しているPostgreSQLの
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);
質問のようになります。はどのように私はテーブルP(org_tre2.km_punkter_des2016)は入力パラメータであることを作るのですか?意味は、tablenameを関数呼び出し(select km_tull(:n、:p))に含める方法を意味し、関数内でこのテーブルを参照していますか?
CREATE FUNCTION km_test(n integer, t text)
...
select km_test(:n,:'tab')
これまでのところ、入力テーブルをFROMステートメントのt変数として参照することはできませんでした。 可能ですか?または回避策がありますか?
ダイナミックコマンドを見てください。 https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN – McNets
リンク@mcNetsをありがとう。私はそれを理解したと思う。 – 9ls1
あなたは大歓迎です。 – McNets