带有单列的简单方案表:
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
可以使用哪些表达式/函数调用还是有一个局限性?
答案 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;