mysql 8 create procedure error
- Dominant language
- Java
- Stars
- 51.8k
- Forks
- 4.4k
- Avg merge
- 3d 8h
- Merged PRs (30d)
- 188
Description
#### System information:
- Operating system (distribution) and version mac os big sur 11.2.2
- DBeaver version 21.0.0.202103021012
- Additional extensions
Windows has the same problem
#### Connection specification:
- Database name and version
- Driver name
- Do you use tunnels or proxies (SSH, SOCKS, etc)?

sql
```
drop procedure if exists `sccmcity`.`CHECK_INDEX`;
create procedure `sccmcity`.`CHECK_INDEX`(in V_Y int, in V_W int, in V_ORG_CODE varchar(20),
in V_CLIENT_CODE varchar(20), in V_RETAIL_CODE varchar(20), out result int)
begin
declare TEMP_COUNT_WEEKS INTEGER;
declare TEMP_Y_P INTEGER;
declare TEMP_W_P INTEGER;
declare TEMP_PRICE_B_RATE_MIN DECIMAL(8,2);
declare TEMP_PRICE_B_RATE_MAX DECIMAL(8,2);
declare TEMP_PRICE_T_RATE_MIN DECIMAL(8,2);
declare TEMP_PRICE_T_RATE_MAX DECIMAL(8,2);
declare TEMP_SALE_AMOUNT_MIN DECIMAL(8,2);
declare TEMP_SALE_AMOUNT_MAX DECIMAL(8,2);
-- 在异常时候使用
declare SQL_STATE CHAR(5);
declare SQLCODE INTEGER default 0;
declare MODIFY_TIME TIMESTAMP;
-- SQL异常处理,设置RESULT = 0
declare exit HANDLER for sqlexception
begin
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'出现异常SQL_STATE:'
or SQL_STATE
or ',SQLCODE:'
or CHAR(SQLCODE));
-- 设置返回结果为0
set
result = 0;
-- 更新CLIENT_CHECK_RATE中预处理的加工状态
update
CLIENT_CHECK_RATE
set PREDEAL_INUSE = '0';
commit;
end;
set
result = 1;
set
MODIFY_TIME = CURRENT_TIMESTAMP;
call DC_LOG('W',
'CHECK_INDEX',
V_CLIENT_CODE,
'开始执行');
-- 1、获取上一年周的有效时间 及校验参数值
select PRE_YEAR,
PRE_WEEK,
COUNT_WEEKS
into
TEMP_Y_P ,
TEMP_W_P ,
TEMP_COUNT_WEEKS
from YEAR_WEEK_MARK
where year = V_Y
and WEEK = V_W
and ORG_CODE = V_ORG_CODE;
select INDEX_MIN,
INDEX_MAX
into
TEMP_PRICE_B_RATE_MIN ,
TEMP_PRICE_B_RATE_MAX
from CLIENT_CHECK_INDEX
where ORG_CODE = V_ORG_CODE
and INDEX_CODE = 'PRICE_B';
select INDEX_MIN,
INDEX_MAX
into
TEMP_PRICE_T_RATE_MIN ,
TEMP_PRICE_T_RATE_MAX
from CLIENT_CHECK_INDEX
where ORG_CODE = V_ORG_CODE
and INDEX_CODE = 'PRICE_T';
select INDEX_MIN,
INDEX_MAX
into
TEMP_SALE_AMOUNT_MIN ,
TEMP_SALE_AMOUNT_MAX
from CLIENT_CHECK_INDEX
where ORG_CODE = V_ORG_CODE
and INDEX_CODE = 'SALE_AMOUNT';
call DC_LOG('W',
'CHECK_INDEX',
V_CLIENT_CODE,
'数据校验逻辑开始');
commit;
-- 2、更新client_stock中的上期库存、订单量、推算销量、指导零售包/条价
-- 2.1 更新上期库存
update
CLIENT_STOCK a
set STOCK_P = (
select STOCK
from CLIENT_STOCK b
where b.Y = TEMP_Y_P
and b.W = TEMP_W_P
and a.ORG_CODE = b.ORG_CODE
and b.RETAIL_CODE = a.RETAIL_CODE
and a.BRAND_CODE = b.BRAND_CODE)
where a.y = V_Y
and a.w = V_W
and a.ORG_CODE = V_ORG_CODE
and a.CLIENT_CODE = V_CLIENT_CODE
and a.RETAIL_CODE = V_RETAIL_CODE;
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'更新client_stock中的上期库存结束');
commit;
-- 2.2 更新上期订单量
update
CLIENT_STOCK a
set order_p = (
select sum(QTY_ORDER)
from SCO_CLIENT_RETAIL_ORDERBASE b
where b.YW >= TEMP_Y_P * 100 + TEMP_W_P
and b.YW < V_Y * 100 + V_W
and b.ORG_CODE = a.ORG_CODE
and b.CUST_CODE = a.RETAIL_CODE
and a.BRAND_CODE = b.BRAND_CODE)
where a.y = V_Y
and a.w = V_W
and a.ORG_CODE = V_ORG_CODE
and a.CLIENT_CODE = V_CLIENT_CODE
and a.RETAIL_CODE = V_RETAIL_CODE;
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'更新client_stock中的订单量结束');
commit;
-- 2.3 更新推算销量
update
CLIENT_STOCK a
set SALE_AMOUNT = 1.00 * (coalesce(stock_p, 0) + coalesce(order_p, 0) - coalesce(stock, 0)) / TEMP_COUNT_WEEKS
where a.y = V_Y
and a.w = V_W
and a.ORG_CODE = V_ORG_CODE
and a.CLIENT_CODE = V_CLIENT_CODE
and a.RETAIL_CODE = V_RETAIL_CODE;
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'更新client_stock中的推算销量');
commit;
-- 2.4 更新指导零售包/条价
update
CLIENT_STOCK a,
(
select GUIDE_PRICE_T,
GUIDE_PRICE_B
from SCB_GUIDE_PRICE b
where a.ORG_CODE = b.ORG_CODE
and a.BRAND_CODE = b.BRAND_CODE) b
set a.GUIDE_PRICE_T = b.GUIDE_PRICE_T,
a.GUIDE_PRICE_B = b.GUIDE_PRICE_B
where a.y = V_Y
and a.w = V_W
and a.ORG_CODE = V_ORG_CODE
and a.CLIENT_CODE = V_CLIENT_CODE
and a.RETAIL_CODE = V_RETAIL_CODE;
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'更新client_stock中的指导零售包/条价结束');
commit;
-- 3、更新client_stock中库存标记、单包零售价格标记、条装零售价格标记
update
CLIENT_STOCK a ,
(
select case
when SALE_AMOUNT > TEMP_SALE_AMOUNT_MAX
or SALE_AMOUNT < TEMP_SALE_AMOUNT_MIN then 'T'
else 'F'
end,
case
when GUIDE_PRICE_B = 0 then 'F'
when GUIDE_PRICE_B is null then 'F'
when 100.0000 * (PRICE_B - GUIDE_PRICE_B) / GUIDE_PRICE_B < TEMP_PRICE_B_RATE_MIN
or 100.0000 * (PRICE_B - GUIDE_PRICE_B) / GUIDE_PRICE_B > TEMP_PRICE_B_RATE_MAX then 'T'
else 'F'
end,
case
when GUIDE_PRICE_T = 0 then 'F'
when GUIDE_PRICE_T is null then 'F'
when 100.0000 * (PRICE_T - GUIDE_PRICE_T) / GUIDE_PRICE_T < TEMP_PRICE_T_RATE_MIN
or 100.0000 * (PRICE_T - GUIDE_PRICE_T) / GUIDE_PRICE_T > TEMP_PRICE_T_RATE_MAX then 'T'
else 'F'
end
from CLIENT_STOCK b
where b.Y = a.Y
and b.W = a.W
and b.ORG_CODE = a.ORG_CODE
and b.RETAIL_CODE = a.RETAIL_CODE
and b.BRAND_CODE = a.BRAND_CODE) b
set a.STOCK_SET = b.STOCK_SET,
a.PRICE_B_SET = b.PRICE_B_SET,
a.PRICE_T_SET = b.PRICE_T_SET
where a.y = V_Y
and a.w = V_W
and a.ORG_CODE = V_ORG_CODE
and a.CLIENT_CODE = V_CLIENT_CODE
and a.RETAIL_CODE = V_RETAIL_CODE;
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'更新client_stock中库存标记、单包零售价格标记、条装零售价格标记结束');
commit;
-- 3、更新client_stock_status中是否校验标记
update
CLIENT_STOCK_STATUS a
set CHECK_FLAG = 'T'
where a.y = V_Y
and a.w = V_W
and a.ORG_CODE = V_ORG_CODE
and a.CLIENT_CODE = V_CLIENT_CODE
and a.RETAIL_CODE = V_RETAIL_CODE;
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'更新client_stock_status中是否校验标记成功');
commit;
-- 加工逻辑结束
call DC_LOG('A',
'CHECK_INDEX',
V_CLIENT_CODE,
'存储过程CHECK_INDEX结束');
commit;
end;
```
#### Describe the problem you're observing:
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 'create procedure `sccmcity`.`CHECK_INDEX`(in V_Y int, in V_W int, in V_ORG_CODE ' at line 3
#### Steps to reproduce, if exist:
#### Include any warning/errors/backtraces from the logs
org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [1064] [42000]: 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 'create procedure `sccmcity`.`CHECK_INDEX`(in V_Y int, in V_W int, in V_ORG_CODE ' at line 3
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:509)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$0(SQLQueryJob.java:440)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:167)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:427)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:812)
at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:3233)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:118)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:167)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:116)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:4517)
at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:105)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.sql.SQLSyntaxErrorException: 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 'create procedure `sccmcity`.`CHECK_INDEX`(in V_Y int, in V_W int, in V_ORG_CODE ' at line 3
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:764)
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648)
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:327)
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:130)
... 12 more
I can look at SQL
But it failed to run, I don't know why
Contributor guide
Assessment
This issue has not been assessed yet.