【问题标题】:SolidDB SQL stored procedure IF EXISTS syntax error and use Variable in sql statementSolidDB SQL 存储过程 IF EXISTS 语法错误并在 sql 语句中使用变量
【发布时间】:2012-12-31 17:45:28
【问题描述】:

编辑:我认为可能无法将 EXISTS 与 IF THEN 一起使用,但我遇到了另一个问题,如何在 sql 语句中使用变量?

EXEC SQL EXECDIRECT CREATE CATALOG CATALOG_NAME;

创建名称为“CATALOG_NAME”的目录,而不是存储在变量中的目录。 我知道在 MSSQL 中你可以这样做:

EXEC('CREATE DATABASE ' + '$(DBNAME)')

SolidDB sql 中的等价物是什么?


我正在尝试创建一个soliddb sql存储过程,它接受输入并根据这些输入执行特定的sql语句。我的代码如下:

"CREATE PROCEDURE ACTION
    (OPTION VARCHAR, CATALOG_NAME VARCHAR)
    BEGIN
        IF OPTION= 'create' THEN
            IF EXISTS (SELECT * FROM sys_catalogs WHERE name=CATALOG_NAME) THEN
                 EXEC SQL EXECDIRECT DROP CATALOG CATALOG_NAME;
            END IF
            EXEC SQL EXECDIRECT CREATE CATALOG CATALOG_NAME;

        ELSEIF OPTION= 'drop' THEN
            IF EXISTS (SELECT * FROM sys_catalogs WHERE name=CATALOG_NAME) THEN
                 EXEC SQL EXECDIRECT DROP CATALOG CATALOG_NAME;
            END IF
        END IF
    END";

当我尝试使用

执行脚本文件时
solsql -f "C:\solidb.sql" "dba" "dba"

我收到错误:

SOLID Procedure Error 23004: Syntax error: syntax error, line 6

我在注释掉 If EXISTS 行的情况下测试了代码,其他一切似乎都工作正常,所以我确定它的 IF EXISTS 行不正确。

所以我的问题是有可能做我想做的事情吗?如果是这样,你能告诉我正确的语法吗?提前谢谢!

【问题讨论】:

  • 逻辑看起来很奇怪:“如果存在do_create”+“如果存在do_drop”其中一个肯定是错误的。 DROP CATALOG CATALOGNAME 也有错别字 --> DROP CATALOG CATALOG_NAME
  • 感谢您注意到错字,我现在已经修正了。这里的逻辑是检查要创建的数据库/目录是否已经存在,如果是,则在创建之前先将其删除。如果要删除的目录存在,则删除它,否则什么也不做。
  • 我首先将 asterix 替换为 1:IF EXISTS (SELECT 1 FROM sys_catalogs WHERE name=CATALOG_NAME)。顺便说一句:你没有提到你的 DBMS 平台。
  • 它的 IBM SolidDB v7,我有另一个关于在 sql 语句中使用变量的问题。 EXEC SQL EXECDIRECT DROP CATALOG CATALOG_NAME;这实际上创建了一个名为“CATALOG_NAME”的目录,我如何使用实际存储在变量 CATALOG_NAME 中的字符,谢谢。
  • 将 asterix 更改为 1 也不起作用 ={

标签: sql stored-procedures


【解决方案1】:

我认为exists只能测试一个表是否存在。 您可能想使用 IFNULL 您可以在 IFNULL 之前将用户变量设置为 null,然后将 select 设置为 1。

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多