私は2つのテーブルを持っています:
CREATE TABLE filedata_temp
(
num serial NOT NULL,
id integer,
mydata character(25),
the_geom geometry,
CONSTRAINT filedata_pkey PRIMARY KEY (num)
)
CREATE TABLE filedata
(
num serial NOT NULL,
id integer,
mydata character(25),
the_geom geometry,
CONSTRAINT filedata_temp_pkey PRIMARY KEY (num)
)
この行が2番目のテーブルに存在しない場合、最初のテーブルの行を2番目のテーブルに挿入する関数を作成したいと思います。比較テーブルのフィールドはnum
フィールドです。
いくつかの例を読んだ後:
CREATE OR REPLACE FUNCTION insert_into_wgs()
RETURNS void AS
$BODY$
BEGIN
insert into filedata
(
id,
mydata,
the_geom,
)
values
(
id,
mydata,
ST_TRANSFORM(the_geom,4326)
);
end
$BODY$
LANGUAGE 'plpgsql'
だから私はいくつかの助けが必要です/
アップデート
私はこの関数を試します(データベースの神は私にそれを言います)
CREATE OR REPLACE FUNCTION insert_into_wgs()
RETURNS void AS
$$
BEGIN
INSERT INTO filedata (id,mydata,the_geom)
SELECT id,mydata,ST_TRANSFORM(the_geom,4326)
FROM filedata_temp
WHERE id NOT IN (SELECT id FROM filedata);
end;
$$
LANGUAGE 'plpgsql'
ただし、テーブルfiledataには何も挿入されません。
関数呼び出し
ce_proc = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgis","postgres","123456");
CallableStatement proc = (CallableStatement) ce_proc.prepareCall("{call insert_into_wgs()}");
proc.execute();