繁体   English   中英

PL / SQL循环问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM