从SQL脚本填充DB2表

时间:2014-07-15 18:29:57

标签: sql db2

我以前写过简单的SQL脚本,但我不是专家,所以我甚至不确定我要问的问题是什么。从DB2 SQL脚本,我想从不同表的内容填充表。最终,我将从其他表中引入数据,但我只需要先了解基础知识。我正在尝试从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过程或函数?

2 个答案:

答案 0 :(得分:1)

您正在使事情变得复杂,您需要做的就是插入select的结果,确保指定列名(我使用了col1,...)

INSERT INTO SASH1.VALIDOSES
    (col1, col2, ... ,coln)
SELECT SWOSNAME, 'IBM', SWOSNAME, 'Y', SWPLATFORM 
FROM SASH1.LISTOSNAMES

请注意,您可能不必指定NULL(默认情况下,除非为您要使用NULL覆盖的列指定了默认值)

答案 1 :(得分:0)

尽管@Lennart所说的过于复杂的事情,如果你坚持使用匿名块意识到整个块是一个单个SQL语句,因此最后必须有一个终结符。由于您还必须具有默认语句终止符,分区块中,因此块本身必须使用其他字符作为终止符。通常使用“@”,因此您可以在BEGIN ATOMIC ... END语句后面加上“@”字符并执行文件:

db2 -td@ -f <yourfile>