Rumah > Soal Jawab > teks badan
Saya mahu mencipta fungsi ini pada mySql 8. Ia akan mencipta nombor siri seperti 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
Saya tidak tahu apa yang salah dengan pertanyaan ini tetapi saya sentiasa mendapat ralat ini.
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
Saya juga mencuba pertanyaan ini.
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
Tetapi masih memberi saya ralat yang sama. Apa yang mungkin salah dengan pertanyaan fungsi saya?
P粉9051445142024-04-03 09:46:44
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');
Penukaran jenis data berbilang adalah berlebihan - MySQL secara tersirat menukar jenis data berdasarkan konteks operasi.
Semua operasi boleh dilakukan dalam satu pernyataan, menjadikan pengisytiharan pembolehubah dan BEGIN-END (serta penetapan semula pembatas) tidak diperlukan.
Kod tersebut memerlukan lastNumber
才能转换为数字数据类型。如果不是,那么你和我的代码在严格 SQL 模式下都会失败。因此,我建议将 lastNumber CHAR(255)
jenis data parameter input ditukar kepada UNSIGNED/INT - ini akan membolehkan ketidaktepatan nilai dikesan pada peringkat panggilan fungsi, bukannya dalam kod fungsi.