我有一个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条消息?
答案 0 :(得分:1)
如果您想要一个结果,请不要从testtable
中选择,从单行表格中进行选择。 Oracle为此提供了dual
表
SELECT test(5)
FROM dual
和
SELECT test(2)
FROM dual
每个都会返回一行结果。
当然,这假设您的test
函数实际上是有效的,并且它实际上返回结果。您发布的代码不会编译,因为您有一个不返回任何内容的函数。函数规范中没有return
子句告诉编译器函数返回什么数据类型。并且函数中没有任何内容返回结果。所以函数不可能编译。我的假设是你的实际函数确实编译了它确实返回了一些东西,而不仅仅是写dbms_output
。
答案 1 :(得分:-1)
尝试使用此代码: -
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;
/
希望这能解决您的问题。