在VALUES clasue中使用REPEAT / SPACE的雪花

时间:2020-02-29 13:56:14

标签: snowflake-cloud-data-platform

带有单列的简单方案表:

CREATE OR REPLACE TABLE t1(c VARCHAR(200));

INSERT INTO t1(c) SELECT repeat('a',100); -- works 
INSERT INTO t1(c) VALUES (repeat('a',100)); -- error

INSERT INTO t1(c) SELECT space(100); -- works
INSERT INTO t1(c) VALUES (space(100)); -- error

SELECT c, LENGTH(c) FROM t1;

SQL编译错误:无效的表达式[LPAD('',CAST(100 *(CAST(LENGTH('a')AS NUMBER(18,0)))AS NUMBER(21,0)),'a') ]在VALUES子句中

INSERT ... VALUES可以使用哪些表达式/函数调用还是有一个局限性?

1 个答案:

答案 0 :(得分:1)

这些表达式似乎是简单的字符串函数,但是从编译器翻译函数的方式来看,它似乎不再是简单的函数。

大多数简单的算术表达式和字符串函数都可以在编译时求值,但是大多数其他表达式不能。

为什么不使用变量?

set my_spaces=(SELECT space(100)); 
set my_aaaa= (SELECT repeat('a',100)); 

CREATE OR REPLACE TABLE t1(c VARCHAR(200)); 

INSERT INTO t1(c) SELECT repeat('a',100); -- works 

INSERT INTO t1(c) VALUES ($my_aaaa); -- works

INSERT INTO t1(c) SELECT space(100); -- works 

INSERT INTO t1(c) VALUES ( $my_spaces ); -- works

SELECT c, LENGTH(c) FROM t1;