PL / SQL循环问题

时间:2014-05-23 08:27:47

标签: sql oracle plsql

我有一个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条消息?

2 个答案:

答案 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;
/

希望这能解决您的问题。