Stored procedures 为什么存储过程在bigquery中不返回'Out'参数?

Stored procedures 为什么存储过程在bigquery中不返回'Out'参数?,stored-procedures,google-bigquery,Stored Procedures,Google Bigquery,我正在BigQuery中编写下面的存储过程,但不确定哪里出错了。 “Out”参数不返回任何内容 存储过程: create procedure if not exists test.GetNumTherapistSessions( in LastNamee string, out NumSessione int64 ) begin select count(s.SessionNum) as NumSession from test.Session s inner

我正在BigQuery中编写下面的存储过程,但不确定哪里出错了。 “Out”参数不返回任何内容

存储过程:

create procedure if not exists test.GetNumTherapistSessions(
    in LastNamee string,
    out NumSessione int64
)
begin 
    select count(s.SessionNum) as NumSession from test.Session s 
    inner join test.Therapist t on s.TherapistID=t.TherapistID
    where t.LastName=LastNamee;
end
下面是我如何声明输出参数以及如何调用它:

declare NumSession int64;
call test.GetNumTherapistSessions("Risk",NumSession);
以下是输出:

到目前为止,一切似乎都正常,但当我选择NumSession时,它返回Null:

select NumSession;
输出:

尝试设置NumSessione=选择计数

尝试设置NUMSession=选择计数


如bigquery的文档所示,您可以使用SET将您需要的任何值分配给特定变量

请注意,bigquery在过程中没有SELECT INTO语句

示例:

SET (value1, value2, value3) = (SELECT AS STRUCT c1, c2, c3 FROM table_name WHERE condition)
从这个答案中:

另一个例子:

UPDATE dataset.Inventory
SET quantity = quantity +
  (SELECT quantity FROM dataset.NewArrivals
   WHERE Inventory.product = NewArrivals.product),
    supply_constrained = false
WHERE product IN (SELECT product FROM dataset.NewArrivals)

另一个例子可以在这里找到:

如bigquery的文档所示,您可以使用SET将您需要的任何值分配给特定的变量

请注意,bigquery在过程中没有SELECT INTO语句

示例:

SET (value1, value2, value3) = (SELECT AS STRUCT c1, c2, c3 FROM table_name WHERE condition)
从这个答案中:

另一个例子:

UPDATE dataset.Inventory
SET quantity = quantity +
  (SELECT quantity FROM dataset.NewArrivals
   WHERE Inventory.product = NewArrivals.product),
    supply_constrained = false
WHERE product IN (SELECT product FROM dataset.NewArrivals)


另一个例子可以在这里找到:

您可以将select counts.SessionNum改为numsession请告诉我这是否解决了您的问题我应该在哪里尝试?在SP中?是,只需添加到NumSession中,例如从test.Session的内部连接测试中选择counts.SessionNum到NumSession中。治疗师t在s.TherapistID=t.TherapistID中,其中t.LastName=LastName;谢谢,我想谢尔盖也是这么说的。我现在就给你试试你可以用select counts.SessionNum转换成numsession请告诉我这是否解决了你的问题我应该在哪里试试?在SP中?是,只需添加到NumSession中,例如从test.Session的内部连接测试中选择counts.SessionNum到NumSession中。治疗师t在s.TherapistID=t.TherapistID中,其中t.LastName=LastName;谢谢,我想谢尔盖也是这么说的。我现在就要试试了,非常感谢。它很好用。你能解释一下为什么我们要增加这一套吗?我假设,当我们定义变量时,它会自动将Begin…End中语句的输出分配到out参数中。谷歌的例子:所以还有其他人给出的另一个答案。他用了“into”,但我试过了,它不起作用。你认为按照你的建议使用“set”是唯一的方法吗?似乎bigquery不需要这样做,所以我建议这是一个正确的答案,我会修改我的答案。非常感谢。它很好用。你能解释一下为什么我们要增加这一套吗?我假设,当我们定义变量时,它会自动将Begin…End中语句的输出分配到out参数中。谷歌的例子:所以还有其他人给出的另一个答案。他用了“into”,但我试过了,它不起作用。你认为按照你的建议使用“set”是唯一的方法吗?似乎bigquery不需要这样做,所以我建议这是一个正确的答案,我会修改我的答案。我明白了,谢谢。我假设begin…end会自动将值分配到Out参数中,但在bigquery上似乎不会这样做,对吗?是的,因为您也可以有多个输出,所以您需要使用set或select into将每个select值分配到您想要的任何输出中,你可以在这些链接中找到更多的例子,希望这些链接能帮助你更好地理解。我明白了,谢谢。但它不接受“进入”那里。它显示:语法错误:预期;但我明白了,谢谢你。我假设begin…end会自动将值分配到Out参数中,但在bigquery上似乎不会这样做,对吗?是的,因为您也可以有多个输出,所以您需要使用set或select into将每个select值分配到您想要的任何输出中,你可以在这些链接中找到更多的例子,希望这些链接能帮助你更好地理解。我明白了,谢谢。但它不接受“进入”那里。它显示:语法错误:预期;但是进入了