BigQuery存储过程报错:无法将v_product_code转为STRING类型求助
BigQuery存储过程报错原因分析
你编写并调用的存储过程触发了错误:
ERROR Query error: Cannot coerce expression v_product_code to type STRING at [virendra101987.Practise.sp_test:7:23]
对应的存储过程代码如下:
create or replace procedure Practise.sp_test() OPTIONS(strict_mode=false) BEGIN DECLARE v_product_code int64; DECLARE v_price int64; set v_product_code = (SELECT product_code FROM `virendra101987.Practise.product` where v_product_code =01); set v_price = (SELECT price FROM `virendra101987.Practise.product` where v_product_code =01); EXECUTE IMMEDIATE v_product_code; EXECUTE IMMEDIATE v_price; insert into `Practise.sales1`(order_date,product_code,quantity_order,sales_price) values (current_date(),v_product_code,1,v_price); END CALL `virendra101987.Practise.sp_test`();
错误原因
EXECUTE IMMEDIATE参数类型不匹配:EXECUTE IMMEDIATE的作用是执行动态SQL语句,它要求传入的必须是字符串类型的合法SQL语句。但你这里传入的是int64类型的变量v_product_code和v_price,BigQuery无法将整数强制转换为可执行的SQL字符串,直接触发类型转换错误。- 冗余的
EXECUTE IMMEDIATE调用:这两行执行语句完全没有意义,v_product_code和v_price是存储查询结果的变量,不是SQL语句,不需要用EXECUTE IMMEDIATE执行,直接删除即可。 - 查询条件存在逻辑问题:
where v_product_code =01里的v_product_code是你刚声明的变量,此时还未初始化,值为NULL,所以这个查询会返回空结果,后续插入的v_product_code和v_price都会是NULL,应该改成where product_code = 1(如果你的筛选条件是产品编码为1的话)。
内容的提问来源于stack exchange,提问作者Vir
相关产品推荐
相关产品推荐

