首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从SQL脚本填充DB2表

从SQL脚本填充DB2表
EN

Stack Overflow用户
提问于 2014-07-15 18:29:56
回答 2查看 546关注 0票数 0

我以前写过简单的SQL脚本,但我不是专家,所以我甚至不确定我要问的问题是否可以完成。在DB2脚本中,我希望从不同表的内容中填充一个表。最终,我将从其他表中获取数据,但我只需要首先使基本知识发挥作用。我正在尝试从DB2 CLP执行一个文件。

从手册上看,我认为这可能有用:

代码语言:javascript
复制
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

但是,我得到了以下错误:

代码语言:javascript
复制
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过程或函数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 20:06:02

您需要做的就是插入select的结果,确保指定列名(我使用了col1,.)

代码语言:javascript
复制
INSERT INTO SASH1.VALIDOSES
    (col1, col2, ... ,coln)
SELECT SWOSNAME, 'IBM', SWOSNAME, 'Y', SWPLATFORM 
FROM SASH1.LISTOSNAMES

请注意,您可能不必指定NULL (它是默认的,除非为要用NULL覆盖的列指定默认值)。

票数 1
EN

Stack Overflow用户

发布于 2014-07-15 20:09:36

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

代码语言:javascript
复制
db2 -td@ -f <yourfile>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24765558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档