【发布时间】:2013-12-18 05:46:27
【问题描述】:
我在过去的一个小时里被困在这个问题上,无法将此 MSSQL Server 存储过程转换为“MySQL 查询”:
DECLARE @LedgerTbl TABLE (PARTY_ID VARCHAR(100),VRDATE VARCHAR(200),
VRNOA VARCHAR(200),ETYPE VARCHAR(50),
DESCRIPTION VARCHAR(500),DEBIT DECIMAL,
CREDIT DECIMAL, RunningTotal decimal)
DECLARE @RunningTotal decimal
SET @RunningTotal = 0
INSERT INTO @LedgerTbl
SELECT PARTY_ID,VRDATE,DCNO VRNOA,ETYPE,DESCRIPTION,DEBIT,CREDIT, null
FROM PLEDGER WHERE PARTY_ID=@partyId AND VRDATE BETWEEN @from AND @to
ORDER BY VRDATE,ETYPE,VRNOA
UPDATE @LedgerTbl
SET @RunningTotal = RunningTotal = @RunningTotal + (DEBIT-CREDIT)
FROM @LedgerTbl
SELECT * FROM @LedgerTbl
如何将其转换为单个 MySQL 查询或 MySQL 存储过程?
更新
我试图将其转换为,但它给了我以下错误:
DELIMETER //
CREATE PROCEDURE `Acc_Ledger` ()
BEGIN
DECLARE RunningTotal DECIMAL;
SET RunningTotal = 0;
CREATE TEMPORARY TABLE LedgerTbl (PARTY_ID VARCHAR(100),VRDATE VARCHAR(200),VRNOA VARCHAR(200),ETYPE VARCHAR(50),DESCRIPTION VARCHAR(500),DEBIT DECIMAL,RTotal decimal);
INSERT INTO LedgerTbl
SELECT PARTY_ID,VRDATE,DCNO VRNOA,ETYPE,DESCRIPTION,DEBIT,CREDIT, null
FROM PLEDGER WHERE PARTY_ID=17 AND VRDATE BETWEEN '2013/12/02' AND '2010/12/02'
ORDER BY VRDATE,ETYPE,VRNOA;
UPDATE LedgerTbl
SET RunninTotal = RTotal = RunningTotal + (DEBIT-CREDIT)
FROM LedgerTbl;
SELECT * FROM LedgerTbl;
END//
DELIMETER;
以下是错误:
您的 SQL 查询中似乎有错误。下面的 MySQL 服务器错误输出,如果有的话,也可以帮助您诊断问题
错误:未知标点字符串@ 10 STR:// SQL:DELIMETER//
创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;DELIMETER//创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;SQL 查询:
DELIMETER// 创建过程
Acc_Ledger() BEGIN DECLARE RunningTotal DECIMAL;MySQL 说:文档
#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 'DELIMETER//
附近创建过程
Acc_Ledger() BEGIN 在第 1 行声明 RunningTotal'
有人可以评价一下吗?
【问题讨论】:
-
如果您的意思是,在单个查询中执行完全相同的操作,您不能因为您的过程具有插入和更新操作。事实上,你不能在任何 RDBMS 中这样做。
-
只需将其转换为 MySQL 存储过程即可。
-
@JorgeCampos 不可能使用子查询。对于您所说的插入和更新,它实际上并没有插入和更新。这里用来填充中间表
@ledgerTbl只是为了达到目的。 -
我没有时间做一个完整的移植,抱歉。此外,这对你来说也是很好的锻炼(前提是你是新手)。我将首先检查变量是如何在 MySQL 存储过程 (SP) 中声明的。 SP 逻辑的其余部分对我来说似乎并不太复杂。
-
这两个参数是谁:
@from AND @to
标签: mysql sql sql-server stored-procedures