我想在 mySql 8 上創建這個函式。它將創建一個序列號,例如00001,00002
CREATE FUNCTION dbOne.create_sequence_number(lastNumber CHAR(255), numberLength INT, lastValue CHAR(255) ) RETURNS char(255)
BEGIN
DECLARE select_var CHAR(255);
SET select_var = (SELECT
CASE WHEN lastNumber = lastValue
THEN
LPAD( '1', numberLength, '0' )
ELSE
LPAD(CAST(( CAST(COALESCE ( lastNumber, '0' ) AS INT) 1 ) AS VARCHAR, numberLength, '0' ) INTO select_var);
RETURN select_var;
END
我不知道這個查詢有什么問題,但我總是收到這個錯誤。
SQL Error [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 'INT) 1 ) AS VARCHAR, numberLength, '0' ) INTO select_var);
RETURN select_var' at line 9
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 'INT) 1 ) AS VARCHAR, numberLength, '0' ) INTO select_var);
RETURN select_var' at line 9
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 'INT) 1 ) AS VARCHAR, numberLength, '0' ) INTO select_var);
RETURN select_var' at line 9
我也試過這個查詢。
CREATE FUNCTION erhav2_db.create_sequence_number(lastNumber CHAR(255), numberLength INT, lastValue CHAR(255) ) RETURNS char(255)
BEGIN
DECLARE select_var CHAR(255);
SELECT
(CASE WHEN lastNumber = lastValue
THEN
lpad( '1', numberLength, '0' )
ELSE
lpad(CAST(( CAST(COALESCE ( lastNumber, '0' ) AS INT) 1 ) AS VARCHAR, numberLength, '0' ))) INTO select_var;
RETURN select_var;
END
但仍然給了我同樣的錯誤。我的函式查詢可能出了什么問題?
uj5u.com熱心網友回復:
CREATE FUNCTION dbOne.create_sequence_number(
lastNumber /* CHAR(255) */ UNSIGNED,
numberLength INT,
lastValue CHAR(255)
)
RETURNS CHAR(255)
RETURN LPAD(CASE WHEN lastNumber = lastValue
THEN 1
ELSE COALESCE(lastNumber, 0) 1
END,
numberLength,
'0');
多個資料型別轉換是多余的 - MySQL 將根據操作背景關系隱式更改資料型別。
所有操作都可以在單個陳述句中執行,這使得宣告的變數和 BEGIN-END(以及分隔符重新分配)都是不必要的。
代碼需要lastNumber可轉換為數字資料型別。如果不是,那么您和我的代碼都將在嚴格的 SQL 模式下失敗。所以我建議將lastNumber CHAR(255)輸入引數資料型別的資料型別更改為 UNSIGNED / INT - 這將允許在函式呼叫階段檢測值不正確,而不是在函式代碼中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/480904.html
上一篇:回傳奇數和空陣列的函式
