我在项目表中有这样的数据
Tabel siswa Tabel jurusan Tabel Penjurusan
id_siswa nama nilai tes id_jurusan id_jurusan id_fakultas nama id id_siswa id_jurusan option ket
1 A 6 01 01 04 Sipil 1 1 01 1 lULUS
2 B 7 02 02 04 Mesin 2 1 02 2 TIDAK LULUS
3 C 8 01 03 09 Sastra 3 1 03 3 TIDAK LULUS
4 D 6 03 4 2 01 1 LULUS
5 E 7 02 5 2 02 2 TIDAK LULUS
6 2 03 3 TIDAK LULUS
我想用这样的格式制作otomatis号码
year_kode fakultas_kode jurusan_nomor(yyffjj0000)
nomor是0001-9999之间的数字,按值max排序" Nilai tes"
和我这样的查询
CREATE PROCEDURE kd_mahasiswa (kode int(10), tgl_daftar date, nama_jurusan varchar(225), nama_fakultas varchar(225))
BEGIN
DECLARE kunci varchar(20);
DECLARE urut varchar(20);
SET kunci = CONVERT(varchar,DATEPART(YEAR,@tgl_daftar)) '+'
UPPER(SUBSTRING(LTRIM(@nama_jurusan)) '+'
UPPER(SUBSTRING(LTRIM(@nama_fakultas));
SELECT urut = ISNULL(MAX(RIGHT(kode,4)),0) + 1 FROM siswa, penjurusan, jurusan, fakultas WHERE penjurusan.kode = siswa.kode
AND jurusan.id_jurusan = penjurusan.id_penjurusan AND fakultas.id_fakultas = jurusan.id_fakultas order by nilai_tes,uang_gedung DESC
SET urut = RIGHT('000' + @urut,4);
SET kunci = CONCAT(kunci,urut);
INSERT INTO siswa VALUES(kunci,@tgl_daftar,@nama_jurusan, @nama_fakultas)
END
我尝试该查询但是程序错误
#1064 - 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 '@kunci varchar(20)
DECLARE @urut varchar(20)
SET @kunci = CONVERT(varch' at line 4
我使用了Mysql ..
请帮我解决这个问题?
谢谢。答案 0 :(得分:0)
您不能DECLARE
用户定义的变量,用户定义变量的名称以@
字符开头。
过程变量名不以@
字符开头。
如果要使用用户定义的变量,请删除DECLARE语句。如果要使用过程变量,请从变量引用中删除@
字符。
请注意,过程中的语句需要以分号结束。并且+
运算符是数字加法,而不是字符串连接。
例如:
DECLARE kunci VARCHAR(20) ;
SET urut = RIGHT(CONCAT('000',urut),4);
SET kunci = CONCAT(kunci,urut);
过程变量,过程参数和列名之间可能存在名称冲突。 MySQL通过赋予过程变量优先于过程参数和列来解决这些冲突。
如果要将表达式的值分配给SELECT语句中的用户定义变量,则需要使用:=
赋值运算符...
SELECT @urut := expr
^^
要将SELECT的结果返回到过程变量,可以使用SELECT语句的SELECT ... INTO
形式:
SELECT expr INTO urut FROM ...
^^^^
(使用SELECT... INTO
,如果查询返回多行,MySQL将抛出错误;您可以通过在末尾添加LIMIT 1
子句来确保查询最多返回一行。 SELECT语句。