我试图将数据插入到temp_table中,然后在分析结果后截断表。使用PERFORM将SELECT语句的字符串插入临时表
这里是我的代码:
CREATE OR REPLACE FUNCTION validation()
RETURNS text AS $$
DECLARE counter INTEGER;
DECLARE minsid INTEGER;
DECLARE maxsid INTEGER;
DECLARE rec RECORD;
DECLARE stmt varchar;
BEGIN
SELECT MIN(sid) INTO minsid FROM staging.validation;
SELECT MAX(sid) INTO maxsid FROM staging.validation;
CREATE TEMPORARY TABLE temp_table (col1 TEXT, col2 INTEGER, col3 BOOLEAN) ON COMMIT DROP;
FOR counter IN minsid..maxsid LOOP
RAISE NOTICE 'Counter: %', counter;
SELECT sql INTO stmt FROM staging.validation WHERE sid = counter;
RAISE NOTICE 'sql: %', stmt;
PERFORM 'INSERT INTO temp_table (col1, col2, col3) ' || stmt;
IF temp_table.col3 = false THEN
RAISE NOTICE 'there is a false value';
END IF;
END LOOP;
END; $$
LANGUAGE plpgsql;
每当我运行此功能 SELECT * FROM validation();
我得到一个错误:
ERROR: missing FROM-clause entry for table "temp_table" Where: PL/pgSQL function validation() line 21 at IF
这里我有多么staging.validation表看起来是 -
https://docs.google.com/spreadsheets/d/1bXO9gqFS-GtcC1qJtgNbFkR6ygOuPtR_RZoU7VNhgrI/edit?usp=sharing
'stmt'的值是什么?错误在哪里?在“PERFORM”上? –
'stmt'是一条SQL语句,它从'staging.validation'表中获取该值。我认为这个问题与IF条件有关。 – hky404
你知道'执行'某事'与'选择'某事'几乎相同吗?可能你想要'EXECUTE'语句呢? – Abelisto