[英]PL/SQL Looping problems
我有一个PL / SQL脚本名称测试
和一个表名testtable
//testtable
a#
-----------
1
2
3
4
在我的测试脚本中:
CREATE OR REPLACE FUNCTION test(a_num IN NUMBER )
RETURN NUMBER;
IS
check NUMBER := 0;
match NUMBER := 0;
BEGIN
SELECT COUNT(*) into check FROM TESTTABLE WHERE a_num = a#;
IF check > 0 THEN
match := match + 1;
END IF;
IF match = 0 THEN
DBMS_OUTPUT.PUT_LINE( 'not found' );
RETURN(-1);
ELSE
DBMS_OUTPUT.PUT_LINE( 'found' );
RETURN(0);
END IF;
END test;
/
对于此脚本,当我输入以下查询时:
select test(5) from testtable;
结果返回将是4倍:
not found
not found
not found
not found
以下查询:
select (test2) from testtable;
收益:
found
found
found
found
如何使其仅显示1条消息?
如果要获得单个结果,请不要从testtable
中进行选择,而应从单行表中进行选择。 Oracle为此提供了dual
表
SELECT test(5)
FROM dual
和
SELECT test(2)
FROM dual
每个将返回一行结果。
当然,这假设您的test
函数实际上是有效的,并且实际上返回了结果。 您发布的代码无法编译,因为您有一个不返回任何内容的函数。 函数规范中没有return
子句,该子句告诉编译器函数返回的数据类型。 函数中没有任何东西可以返回结果。 因此该函数可能无法编译。 我的假设是您的实际函数确实会编译,并且确实会返回某些内容,而不仅仅是写入dbms_output
。
尝试使用此代码:-
CREATE OR REPLACE FUNCTION test(a_num IN NUMBER )
RETURN NUMBER;
IS
check NUMBER := 0;
match NUMBER := 0;
BEGIN
SELECT COUNT(*) into check FROM TESTTABLE WHERE a# =a_num;
IF check > 0 THEN
match := match + 1;
END IF;
IF match = 0 THEN
DBMS_OUTPUT.PUT_LINE( 'not found' );
RETURN(-1);
ELSE
DBMS_OUTPUT.PUT_LINE( 'found' );
RETURN(0);
END IF;
END test;
/
希望这能解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.