bigquery 存储过程 delete 语句删除了它不应该删除的行

bigquery stored procedure delete statement removes rows it shouldn't

当我使用存储过程执行带有 WHERE 子句的 DELETE 语句时,该子句似乎被忽略了。

重现步骤:

创建 BQ table

CREATE TABLE `[project].[dataset].test` (
   email STRING NOT NULL,
   providerId STRING NOT NULL
);

添加测试数据

insert into `[project].[dataset].test` (email, providerId) values ('test.email@gmail.com', 'test1');
insert into `[project].[dataset].test` (email, providerId) values ('test.email@gmail.com', 'test2');

创建一个将 emailproviderId 作为输入的存储过程

CREATE OR REPLACE PROCEDURE `[project].[dataset].RemovePermission`(IN providerId STRING, IN email STRING)
BEGIN
  DELETE FROM `[project].[dataset].test` p
  WHERE       p.email = email
              AND p.providerId = providerId;
END;

执行存储过程

CALL [project].[dataset].RemovePermission('test1', 'test.email@gmail.com`)

注意响应被删除了 2 行,测试 table 现在是空的。

相反,如果您手动执行删除,如下所示,只会删除 1 行 - 这是正确的行为。

DELETE FROM `[project].[dataset].test` p
  WHERE       p.email = 'test.email@gmail.com'
              AND p.providerId = 'test1';

我做错了什么?

参数名称 email, providerId 与列名称 email, providerId“冲突”,因此 WHERE p.email = email AND p.providerId = providerId 总是 true

只需更改参数名称,它就会按预期工作。像

CREATE OR REPLACE PROCEDURE `project.dataset.RemovePermission`(IN Id STRING, IN txt STRING)
BEGIN
  DELETE FROM `project.dataset.test` p
  WHERE p.email = txt
  AND p.providerId = Id;
END;