当前位置: 首页 > 知识库问答 >
问题:

是否在mysql中声明语法错误?

司马羽
2023-03-14

我是mysql新手,我正在尝试创建一个存储过程,但由于声明变量而出现语法错误。我使用的mysql版本是5.5.43,我的过程是:

CREATE PROCEDURE spSearch
(
    p_ACTION INT,
    p_PROJECT_CUSTOMER INT,     
    p_PROJECT_NAME VARCHAR(50), 
    p_PROJECT_SALESPERSON INT, 
    p_PROJECT_MANAGER INT,
    p_PROJECT_PMF INT,
    p_PROJECT_TYPE INT,
    p_PROJECT_DESIGNER INT,
    p_PROJECT_AANDD INT,
    p_PROJECT_REFD INT,
    p_PROJECT_VENDOR INT,
    p_PROJECT_GENERALCONTRACTOR INT,
    p_PROJECT_PUNCHLIST varchar(1),
    p_PROJECT_LOCATION INT,
    p_PROJECT_CLIENTTYPE INT,
    p_PROJECT_INSTALLDATE VARCHAR(50),
    p_PROJECT_INSTALLDATETO VARCHAR(50),
    p_PROJECT_ORDERENTRYDATE VARCHAR(50),
    p_PROJECT_ORDERENTRYDATETO VARCHAR(50),
    p_PROJECT_MOVEINDATE VARCHAR(50),
    p_PROJECT_MOVEINDATETO VARCHAR(50),
    p_PROJECT_ACTIVE_FLAG VARCHAR(1)
)
BEGIN
    DECLARE ABC VARCHAR(1400);
END;

我得到了这个错误:

 #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 28

请帮助删除此语法错误。

共有1个答案

王兴庆
2023-03-14

似乎您的分隔符有问题。试试这个:

delimiter //

CREATE PROCEDURE spSearch
(
    p_ACTION INT,
    p_PROJECT_CUSTOMER INT,     
    p_PROJECT_NAME VARCHAR(50), 
    p_PROJECT_SALESPERSON INT, 
    p_PROJECT_MANAGER INT,
    p_PROJECT_PMF INT,
    p_PROJECT_TYPE INT,
    p_PROJECT_DESIGNER INT,
    p_PROJECT_AANDD INT,
    p_PROJECT_REFD INT,
    p_PROJECT_VENDOR INT,
    p_PROJECT_GENERALCONTRACTOR INT,
    p_PROJECT_PUNCHLIST varchar(1),
    p_PROJECT_LOCATION INT,
    p_PROJECT_CLIENTTYPE INT,
    p_PROJECT_INSTALLDATE VARCHAR(50),
    p_PROJECT_INSTALLDATETO VARCHAR(50),
    p_PROJECT_ORDERENTRYDATE VARCHAR(50),
    p_PROJECT_ORDERENTRYDATETO VARCHAR(50),
    p_PROJECT_MOVEINDATE VARCHAR(50),
    p_PROJECT_MOVEINDATETO VARCHAR(50),
    p_PROJECT_ACTIVE_FLAG VARCHAR(1)
)
BEGIN
    DECLARE ABC VARCHAR(1400);
END//

delimiter ;
 类似资料:
  • 我有以下表格: 如果不存在,则创建表( varchar(50)不为空, varchar(50)不为空, varchar(50)不为空, 外键('courseid')在删除级联上引用'course'('course_id') )ENGINE=InnoDB默认CHARSET=latin1; 如果不存在,请创建表 varchar(50)Not NULL, varchar(50)Not NULL, var

  • 我使用mariadb和heidisql来执行sql: DECLARE@Account tID INT; 将值('testfirstname','a','testlastname','user@email.com“,1,1,NOW()); set@Account tID=Last_Insert_Id(); 我一直收到一个错误: QL Error(1064):您的SQL语法有错误;查看与您的Maria

  • 问题内容: 如下代码: 返回以下错误: 为什么会这样呢?我对布尔值非常熟悉。 问题答案: 尝试以下方法: 或使用其他名称。关键是在Java中,它是一个关键字,不能用作变量名- 在语言规范中就在这里。供将来参考,这是用于: 该声明跳过的当前迭代,或循环。未标记的形式跳到最里面的循环主体的末尾,并评估控制该循环的布尔表达式。

  • 问题内容: 我想知道a。*,c.name,… a.access等的含义。换句话说,当我在点和点的功能之前添加字母时,我指的是什么。 这是我发现这种情况的代码示例: 问题答案: 如果查看该子句,则会看到以下内容: 在子句中,您将看到: 这 别名 的表(不管它是真正的称呼)的名称,并以分别。在这种情况下,实际上只是保存类型并提高查询的可读性。 点将一个列名与一个表名相关联,以便MySQL知道要查找的表

  • 我是第一次使用Qt-6,对C++比较业余。我看到了这种类型的类声明,但不理解它的含义。 这叫什么?谁能解释一下这是什么或者指出相关的材料/问题。

  • 问题内容: 我刚刚开始学习语言,但仍在尝试消化一些东西。 我写了一个函数为: 我真的很困惑或由于缺乏知识而无法理解的用例 。 问题答案: 我在“ 您可以在Go中一次声明多个变量吗? ”中提到过:解释了。 但是您需要具有与函数的每个参数相关联的类型,而上一个参数列表中并非如此。 顺序始终是,而不是遵循变量声明规范: 你会总能找到一个类型 后 一个:或