temp_tableにデータを挿入し、その結果を解析してテーブルを切り捨てようとしています。ここでPERFORMを使用してSELECT文の文字列をテンポラリテーブルに挿入する
は私のコードです:私はこの機能 SELECT * FROM validation();
を実行するたびに
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;
私はエラーを取得する:ここで
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'の値は何ですか?そしてエラーはどこですか? '実行 'について? –
'stmt'はSQLステートメントで、' staging.validation'テーブルからその値を取得します。問題はIF条件だと思う。 – hky404
「何かを実行する」ことは、「何かを選択する」とほぼ同じことを知っていますか?おそらく代わりに 'EXECUTE'文が必要でしょうか? – Abelisto