当我使用存储过程执行 DELETE
带有 WHERE
从句,从句似乎被忽略了。
复制步骤:
创建bq表
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');
创建一个以email和providerid作为输入的存储过程
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行,测试表现在是空的。
相反,如果手动执行delete,如下所示,只删除1行-这是正确的行为。
DELETE FROM `[project].[dataset].test` p
WHERE p.email = 'test.email@gmail.com'
AND p.providerId = 'test1';
我做错什么了?
1条答案
按热度按时间mftmpeh81#
参数名称
email, providerId
与列名“冲突”email, providerId
因此WHERE p.email = email AND p.providerId = providerId
总是true
只要更改参数名称,它就应该按预期工作。像这样的