oracle中可以在自定義函數中使用序列嗎?怎么使用啊


我創建的序列
create sequence student_no
increment by 1
start with 1
maxvalue 9999
cycle;
函數:create or replace function getstudentno
return varchar2
is
 student_no varchar2(8);
 year varchar2(4);
 no number;
begin
 select to_char(sysdate,'yyyy') into year from dual;
 
 dbms_output.put_line(year);
 return year;
end getstudentno;
/
此時可以創建,但是在begin中加入dbms_output.putline(student_no.xextval);時,就報編譯錯誤。
我需要在函數中使用序列,應該怎樣用,需要授權嗎?

12 个解决方案

#1


dbms_output.putline(student_no.xextval);代碼錯了吧nextval

#2


引用 1 樓 wumolin 的回復:
dbms_output.putline(student_no.xextval);代碼錯了吧nextval
 是啊,看看是不是因為寫錯了吧

#3


不好意思,是buhaodbms_output.putline(student_no.nxextval);少打了一個字母。不是寫錯了。

#4


序列.nextval ---》下一個值,
序列.currval ---》當前值

#5


我再說明一下,不是序列的nextval有問題,那只是我打錯了。大家可以把那個錯誤地方改一下,創建函數試試。
求高手給一個明確的答復。

#6


我再說明一下,不是序列的nextval有問題,那只是我打錯了。大家可以把那個錯誤地方改一下,創建函數試試。
求高手給一個明確的答復。

#7


我再說明一下,不是序列的nextval有問題,那只是我打錯了。大家可以把那個錯誤地方改一下,創建函數試試。
求高手給一個明確的答復。

#8


樓主的最終的需求是什么?我感覺你用函數的目的是為了返回序列號的當前值或是下一個值,而這種需求用序列號是可以直接的解決的。我的建議是,直接的引用序列的下一個值或當前值,放棄用函數

#9


生成8位學號,要求前四位是年份數,后四位是從1開始,每次增1的數字

#10


引用 9 樓 Icing9520 的回復:
生成8位學號,要求前四位是年份數,后四位是從1開始,每次增1的數字

你用2013||序列號.nextval試試

#11


試過,編譯過不去。只要函數中有序列,就過不去了

#12


自己發現錯誤了,原來是定義的變量名和自己的序列名一樣,所以才會這樣,麻煩各位了。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com