首先想问问,那里有关于存储过程,触发器之类的学习资料,谢了~另外想实现一个很简单的存储过程
表A里有一个字段ID,从1,2,3..........大概有几万把,有些记录可能被删除了,
现在想得到最小的那个未被使用的ID,该如何写比如,目前的ID是:1,2,3,5,6,8,9...我要得到4
2,3,5,6,8...我要得到1 (1是最小的)
表A里有一个字段ID,从1,2,3..........大概有几万把,有些记录可能被删除了,
现在想得到最小的那个未被使用的ID,该如何写比如,目前的ID是:1,2,3,5,6,8,9...我要得到4
2,3,5,6,8...我要得到1 (1是最小的)
lz参照一下
跟你的问题差不多
你只不过取min()而已
SQL> SELECT * FROM TMP ORDER BY ID; ID NAME
---------- ----------
1 A
4 A
6 A
8 A
10 BSQL> DECLARE
2 MINV NUMBER;
3 MAXV NUMBER;
4 I NUMBER;
5 ICOUNT NUMBER;
6 BEGIN
7 SELECT MIN(ID) INTO MINV FROM TMP;
8 SELECT MAX(ID) INTO MAXV FROM TMP;
9 FOR I IN MINV..MAXV
10 LOOP
11 SELECT COUNT(1) INTO ICOUNT FROM TMP WHERE ID=I;
12 IF ICOUNT=0 THEN
13 DBMS_OUTPUT.PUT_LINE(I);
14 END IF;
15 END LOOP;
16 END;
17 /
--------------------------
方法不错,怎么把这个写成存储过程呢?我只要得到DBMS_OUTPUT.PUT_LINE(I);里最小的一个值
谢了!!!
as
MINV NUMBER;
MAXV NUMBER;
I NUMBER;
ICOUNT NUMBER;
.....
......
.....
MINV NUMBER;
MAXV NUMBER;
I NUMBER;
ICOUNT NUMBER;
begin
SELECT MIN(k.id) INTO MINV FROM ad k;
SELECT MAX(k.id) INTO MAXV FROM ad k;
FOR I IN MINV..MAXV
LOOP
SELECT COUNT(1) INTO ICOUNT FROM ad k WHERE k.id=I;
IF ICOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE(I);
END IF;
END LOOP;
end ID;
我测试的结果是:
1
4
6
....我就是这么写的,但我现在需要得到一个值,最小的那个值,要有一个输出的那种,例如:
create or replace procedure ID(pno_result out number) is
MINV NUMBER;
MAXV NUMBER;
I NUMBER;
ICOUNT NUMBER;
....................
就是问这个pno_result := 该怎么写???谢了
IF ICOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE(I);
break;
END IF;
Line: 17
Text: break;Error: PL/SQL: Statement ignored
Line: 17
Text: break;
......
IF ICOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE(I);
pno_result := I;
exit;
END IF;