首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用存储过程建立自动编号

如何用存储过程建立自动编号
EN

Stack Overflow用户
提问于 2014-09-19 03:23:30
回答 1查看 366关注 0票数 0

我在项目表中有这样的数据

代码语言:javascript
复制
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

我想用这样的格式制作欧托马提斯号

year_kode fakultas_kode jurusan_nomor(yyffjj0000)

游牧民为0001-9999之间的编号,按值max "Nilai tes“进行排序。

我的疑问是这样的

代码语言:javascript
复制
    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

我尝试了这个查询,但是过程错误。

代码语言:javascript
复制
  #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..。

请帮我解决这个问题?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-09-19 03:55:17

您不能DECLARE用户定义的变量,用户定义变量的名称以@字符开始.

过程变量名不以@字符开头。

如果要使用用户定义的变量,请删除DECLARE语句。如果要使用过程变量,请从变量引用中删除@字符。

注意,过程中的语句需要用分号结束。+运算符是数字加法,而不是字符串级联。

例如:

代码语言:javascript
复制
    DECLARE kunci VARCHAR(20) ;
    SET urut = RIGHT(CONCAT('000',urut),4);
    SET kunci = CONCAT(kunci,urut);

过程变量、过程参数和列名之间可能存在名称冲突。MySQL通过赋予过程变量优先于过程参数和列来解决这些冲突。

如果要将表达式的值赋值给SELECT语句中的用户定义变量,则需要使用:=赋值操作符.

代码语言:javascript
复制
    SELECT @urut := expr 
                 ^^

要将SELECT的结果赋值给过程变量,可以使用SELECT语句的SELECT ... INTO表单:

代码语言:javascript
复制
    SELECT expr INTO urut FROM ...
                ^^^^

(对于SELECT... INTO,如果查询返回多行,MySQL将抛出一个错误;您可以通过在SELECT语句末尾添加LIMIT 1子句来确保查询最多返回一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25925873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档