如何在 Postgresql 的 DO 语句中使用查询参数?

How to use a query parameter in DO statement in Postgresql?

我试图在 DO 语句中使用查询参数。

但下面的示例代码因异常而失败。

Message=42703: column "param" does not exist

          using (var conn = new NpgsqlConnection(cs)) {
                conn.Open();

                var cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new NpgsqlParameter("@param", 200));
                cmd.CommandText = @"
                DO $$ 
                    DECLARE _temp_val integer := @param;
                BEGIN       

                    -- do something                    
                    
                    CREATE TEMP TABLE TEMP_TB(
                        VALUE1 INTEGER
                    );

                    INSERT INTO TEMP_TB (VALUE1) VALUES (_temp_val);    

                END $$;

                SELECT * FROM TEMP_TB;
                ";

                var result = cmd.ExecuteScalar();
            }

另一方面,下面的示例代码无一例外地成功了。

          using (var conn = new NpgsqlConnection(cs)) {
                conn.Open();

                var cmd = conn.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new NpgsqlParameter("@param", 200));
                cmd.CommandText = "select @param;";

                var result = cmd.ExecuteScalar();
            }

如何修复错误? 谢谢

您不能在 DO 语句中使用参数。

要么在客户端构造查询字符串(提防SQL注入!)要么(更好)在数据库中编写一个函数并传递一个参数。