Cipta fungsi MySQL untuk mengembalikan nilai daripada hasil SELECT
P粉685757239
P粉685757239 2024-04-02 10:33:22
0
1
453

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粉685757239
P粉685757239

membalas semua(1)
P粉905144514
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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan