我正在尝试创建以ARRAY为参数并插入到表中的BQ例程。
filename也可以为NULL。
CREATE OR REPLACE PROCEDURE `##.history`( Job_ID STRING, filename ARRAY<STRING> , Status STRING )
BEGIN
EXECUTE IMMEDIATE format
("""
INSERT INTO
`##.tablename`
( JOB_ID,
FILENAME,
STATUS,
)
values
(GENERATE_UUID(),
'"""||Job_ID||"""',
'"""||filename|| """',
'"""||Status||"""'
)
""");
当我调用过程时,它给出了错误:
调用###.history
('ext1',['f1.txt','f2.txt'],'start'(;
参数类型的运算符||没有匹配的签名:STRING、ARRAY。支持的签名:STRING||STRING;字节||字节;数组| |数组
您的错误来自format语句,并试图连接数组,而连接只是一个字符串函数。正如Max Zolotenko所指出的,在您提供的示例中,您可能不需要EXECUTE IMMEDIATE
,您可以继续执行以下操作:
CREATE OR REPLACE PROCEDURE `so_test.history`( Job_ID STRING, filename ARRAY<STRING> , Status STRING )
BEGIN
INSERT INTO so_test.struct_insert (job_id, filename, status)
VALUES
(
Job_ID,
filename,
Status
);
END;
然而,我想指出的是,在您的示例中,您也在尝试插入GENERATE_UUID()
,但是您的值列表只包含3列。你也需要调整一下。