我以前写过简单的SQL脚本,但我不是专家,所以我甚至不确定我要问的问题是否可以完成。在DB2脚本中,我希望从不同表的内容中填充一个表。最终,我将从其他表中获取数据,但我只需要首先使基本知识发挥作用。我正在尝试从DB2 CLP执行一个文件。
从手册上看,我认为这可能有用:
BEGIN ATOMIC
FOR ROW AS
SELECT OSN.SWOSNAME, OSN.SWPLATFORM FROM SASH1.LISTOSNAMES OSN
DO
INSERT INTO SASH1.VALIDOSES
VALUES (ROW.OSN.SWOSNAME, 'IBM', ROW.OSN.SWOSNAME, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Y', ROW.OSN.SWPLATFORM, NULL);
END FOR;
END但是,我得到了以下错误:
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0104N An unexpected token "END-OF-STATEMENT" was found following
"SN.SWPLATFORM, NULL)". Expected tokens may include: "<delim_semicolon>".
LINE NUMBER=6. SQLSTATE=42601很明显我不知道我在这里做什么。是否可以这样做(从另一个表中的数据填充表),而不必在数据库中创建SQL过程或函数?
发布于 2014-07-15 20:06:02
您需要做的就是插入select的结果,确保指定列名(我使用了col1,.)
INSERT INTO SASH1.VALIDOSES
(col1, col2, ... ,coln)
SELECT SWOSNAME, 'IBM', SWOSNAME, 'Y', SWPLATFORM
FROM SASH1.LISTOSNAMES请注意,您可能不必指定NULL (它是默认的,除非为要用NULL覆盖的列指定默认值)。
发布于 2014-07-15 20:09:36
尽管@Lennart所说的事情过于复杂,如果您坚持使用匿名块,那么要意识到整个块是一个单一的SQL语句,因此必须在结尾处有一个终止符字符。由于您还必须在块中具有默认的语句终止符分号,因此块本身必须使用其他字符作为终止符。"@“是常用的,因此您可以将"@”字符放在BEGIN ATOMIC ... END语句之后并执行该文件:
db2 -td@ -f <yourfile>https://stackoverflow.com/questions/24765558
复制相似问题