如何使用 PostgreSQL 中另一个 table 的所有记录测试新值?
How to test a new value with all records from another table in PostegreSQL?
我想要一个触发器函数来测试新值(仅针对一列)是否存在于另一列中的另一列 table。
基本上我有一个 table : netgeo_cable_test
我想测试插入到列 geom
中的新值是否存在于来自 table netgeo_point_tech
.
我想尝试像数组一样的循环,但 SELECT
的结果不是数组。
我不知道如何才能测试列中的每条记录。
根据您的需要尝试以下调整:
CREATE OR REPLACE FUNCTION insert_records_netgeo_cable_test(
_geom text
, _fld2 text
, _fld3 text
)
RETURNS boolean AS
$func$
DECLARE
/* _testCond int; */
_sql text := 'INSERT INTO netgeo_cable_test (geom, fld2, fld3)
VALUES(, , )'; -- PREPARED SQL
BEGIN
/* SELECT COUNT(*) INTO _testCond FROM netgeo_point_tech WHERE geom = ;
### IF _testCond == 0 THEN */
IF EXISTS (SELECT 1 FROM netgeo_point_tech WHERE geom = ) THEN
EXECUTE _sql
USING , , ; -- EXECUTE PREPARED SQL Wt VALUES
RETURN true; -- boolean!
ELSE
RETURN FALSE; -- boolean for failed test Cond
END IF;
RAISE NOTICE 'sql: %', _sql;
END
$func$ LANGUAGE plpgsql;
希望这对更多信息有所帮助,请参阅以下内容[https://dba.stackexchange.com/questions/159424/how-to-use-function-parameters-in-dynamic-sql-with-execute]
我想要一个触发器函数来测试新值(仅针对一列)是否存在于另一列中的另一列 table。
基本上我有一个 table : netgeo_cable_test
我想测试插入到列 geom
中的新值是否存在于来自 table netgeo_point_tech
.
我想尝试像数组一样的循环,但 SELECT
的结果不是数组。
我不知道如何才能测试列中的每条记录。
根据您的需要尝试以下调整:
CREATE OR REPLACE FUNCTION insert_records_netgeo_cable_test(
_geom text
, _fld2 text
, _fld3 text
)
RETURNS boolean AS
$func$
DECLARE
/* _testCond int; */
_sql text := 'INSERT INTO netgeo_cable_test (geom, fld2, fld3)
VALUES(, , )'; -- PREPARED SQL
BEGIN
/* SELECT COUNT(*) INTO _testCond FROM netgeo_point_tech WHERE geom = ;
### IF _testCond == 0 THEN */
IF EXISTS (SELECT 1 FROM netgeo_point_tech WHERE geom = ) THEN
EXECUTE _sql
USING , , ; -- EXECUTE PREPARED SQL Wt VALUES
RETURN true; -- boolean!
ELSE
RETURN FALSE; -- boolean for failed test Cond
END IF;
RAISE NOTICE 'sql: %', _sql;
END
$func$ LANGUAGE plpgsql;
希望这对更多信息有所帮助,请参阅以下内容[https://dba.stackexchange.com/questions/159424/how-to-use-function-parameters-in-dynamic-sql-with-execute]