下面创建民族编号自增代码在ISQLPLUS执行后,就提示:
警告: 创建的函数带有编译错误。检查了好久还是检查不出原因麻烦各位了!
CREATE OR REPLACE FUNCTION funNationNo()
return char
is
x number;
varNationNo1 char(3); /*最大民族编号*/
varNationNo2 char(3); /*新的民族编号*/
BEGIN
varNationNo1 :='';
SELECT NVL(max(NationNo),'0') into varNationNo1
FROM DCNation; /*若nvl里第一个参数值为空,则取第二个参数值*/
IF varNationNo1='0' THEN /*民族字典无记录,编号从001开始*/
varNationNo2 := '001';
ELSE /*最大编号值加1*/
x := to_number(varNationNo1)+1;
END IF;
IF x<10 THEN
varNationNo2 := '00'||ltrim(to_char(x));
ELSIF x<100 THEN
varNationNo2 := '0'||ltrim(to_char(x));
ELSE
varNationNo2 := ltrim(to_char(x));
END IF;
RETURN(varNationNo2);
END funNationNo;
警告: 创建的函数带有编译错误。检查了好久还是检查不出原因麻烦各位了!
CREATE OR REPLACE FUNCTION funNationNo()
return char
is
x number;
varNationNo1 char(3); /*最大民族编号*/
varNationNo2 char(3); /*新的民族编号*/
BEGIN
varNationNo1 :='';
SELECT NVL(max(NationNo),'0') into varNationNo1
FROM DCNation; /*若nvl里第一个参数值为空,则取第二个参数值*/
IF varNationNo1='0' THEN /*民族字典无记录,编号从001开始*/
varNationNo2 := '001';
ELSE /*最大编号值加1*/
x := to_number(varNationNo1)+1;
END IF;
IF x<10 THEN
varNationNo2 := '00'||ltrim(to_char(x));
ELSIF x<100 THEN
varNationNo2 := '0'||ltrim(to_char(x));
ELSE
varNationNo2 := ltrim(to_char(x));
END IF;
RETURN(varNationNo2);
END funNationNo;
--2、使用varchar2代替char(这个并不是错误,但建议这样做)
CREATE OR REPLACE FUNCTION funNationNo RETURN VARCHAR IS
x NUMBER;
varNationNo1 VARCHAR(3); /*最大民族编号*/
varNationNo2 VARCHAR(3); /*新的民族编号*/
BEGIN
varNationNo1 := '';
SELECT NVL(MAX(NationNo), '0') INTO varNationNo1 FROM DCNation; /*若nvl里第一个参数值为空,则取第二个参数值*/
IF varNationNo1 = '0' THEN
/*民族字典无记录,编号从001开始*/
varNationNo2 := '001';
ELSE
/*最大编号值加1*/
x := to_number(varNationNo1) + 1;
END IF;
IF x < 10 THEN
varNationNo2 := '00' || ltrim(to_char(x));
ELSIF x < 100 THEN
varNationNo2 := '0' || ltrim(to_char(x));
ELSE
varNationNo2 := ltrim(to_char(x));
END IF;
RETURN(varNationNo2);
END funNationNo;
请问一下你用的是什么软件来设计ORACLE代码的啊?