【问题标题】:WHILE query syntax in MonetDBMonetDB 中的 WHILE 查询语法
【发布时间】:2015-01-23 21:27:11
【问题描述】:

我正在使用最新版本的 Windows 版 MonetDB,并且已将其安装在 Windows 7 上。

大家好,我最近开始研究 MonetDB。最终目标是准备原型来展示 MonetDB 和 SQL Server 之间的查询性能差异。

我已经阅读了 MonetDB SQL 参考文档,但我不清楚我应该如何准备 WHILE 查询。

创建表查询:

sql>CREATE TABLE TestString ( Name VARCHAR(40) NULL );

声明并设置局部变量:

sql>delcare rowcount;
sql>set rowcount=1;

虽然我尝试了查询:

sql>WHILE rowcount<1000000
sql>DO
sql>insert TestString Values CAST(uuid() as VARCHAR(50))
sql>set rowcount=rowcount+1
sql>END WHILE

我确实通过指定缩进在 while 查询中尝试了不同的变体 但它仍然不对。

有人可以帮助我获得正确的语法或指向我任何有用的用户手册吗?

【问题讨论】:

    标签: monetdb


    【解决方案1】:

    MonetDB 支持大多数标准 SQL-99。 WHILE 是 Microsoft Transact-SQL 的一部分,它不是标准的一部分,也不受 MonetDB 支持。

    让这个工作如下:

    CREATE TABLE TestString ( Name String NULL );
    
    CREATE PROCEDURE InsertTestString (nrow int)
    BEGIN
        DECLARE rowcount int;
        SET rowcount = 0;
        WHILE (rowcount < nrow) DO
            INSERT INTO TestString VALUES (uuid());
            SET rowcount = rowcount + 1;
        END WHILE;
    END;
    
    CALL InsertTestString(100);
    

    显然,WHILE 希望被包裹在 PROCEDURE 或 FUNCTION 中。今天学到了一些东西...

    另一个重要提示:大量单个 INSERT 命令在 MonetDB 中不是很快。建议将它们包装在事务中或使用批量加载。

    【讨论】:

    • 我有这种感觉,这是他测试的一部分(测试插入速度)
    • @Hannes,我使用的是 WHILE,因为我在 MonetDB 的“SQL 参考”部分看到他们提到它是受支持的。但是有示例代码执行的示例。检查此链接,monetdb.org/Documentation/SQLreference/Flowofcontrol
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2021-10-22
    • 2021-10-16
    相关资源
    最近更新 更多