Mysql语法错误

标签 mysql sql stored-procedures mysql-error-1064

运行存储过程时出现语法错误,我在 +v_RowIndex+' And ('+v_RowIndex+' + '+v_NoOfRows+')' 附近得到它;

有人可以帮助我吗?

DELIMITER //; //


CREATE PROCEDURE GetProducts(v_WhereClause  NATIONAL VARCHAR(4000),
v_SortExpression    NATIONAL VARCHAR(128),
v_RowIndex      INT,
v_NoOfRows      INT)
BEGIN 

   DECLARE v_SQL NATIONAL VARCHAR(4000);

   IF (v_WhereClause != '') then

      SET v_WhereClause = CONCAT('WHERE ',char(13),v_WhereClause);
   end if;

   IF (v_SortExpression != '') then

      SET v_SortExpression = CONCAT('ORDER BY ',v_SortExpression);
   end if;

   SET v_SQL = CONCAT('SQLWAYS_EVAL# AS (
SELECT ROW_NUMBER() OVER (',v_SortExpression,
   'SQLWAYS_EVAL#                   
[Id],
[Name],
[Description],
[Unit],
[UnitPrice],
[CreateDate]
FROM 
[Product]   
',v_WhereClause,'SQLWAYS_EVAL#   
Row between ')+v_RowIndex+' And ('+v_RowIndex+' + '+v_NoOfRows+')';

   SET @SWV_Stmt = v_SQL;
   PREPARE SWT_Stmt FROM @SWV_Stmt;
   EXECUTE SWT_Stmt;
   DEALLOCATE PREPARE SWT_Stmt;

   SET v_SQL = CONCAT('SELECT COUNT(Id)
   FROM
   Product ',v_WhereClause);

   SET @SWV_Stmt = v_SQL;
   PREPARE SWT_Stmt FROM @SWV_Stmt;
   EXECUTE SWT_Stmt;
   DEALLOCATE PREPARE SWT_Stmt;

END;
//

最佳答案

我立即发现两个问题:

ROW_NUMBER() OVER (...)

MySQL不支持窗口函数

[Id]

方括号在 MySQL 中引用对象名称是非法的(实际上在除 SQL Server 之外的所有数据库中)

关于Mysql语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525880/

相关文章:

MySQL:两列之间的条件

python - Django 中的 MySQLdb 错误

sql - 如果存储过程中参数为空,则选择全部

mysql - 在 sql 查询中使用变量

mysql - 创建一个 mysql 函数来操作日期

mysql - 无法删除表 : A foreign key constraint fails

SQL 错误 Turkish_CI_AS 和 SQL_Latin1_General_CP1_CI_AS

mysql - MySQL程序错误

sql-server - 存储过程中的异常流调用另一个存储过程

java - Apache DBUtils - 存储过程