首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于PL/SQL打印语法?

关于PL/SQL打印语法?
EN

Stack Overflow用户
提问于 2022-02-19 09:25:42
回答 1查看 42关注 0票数 -1

我试图用PL/SQL编写一个程序,用于打印1到50之间的素数,因为我使用了以下代码-

代码语言:javascript
运行
复制
DECLARE
    i number(3);
    j number(3);
BEGIN
    i := 2;
    LOOP
        j := 2;
        LOOP
            EXIT WHEN((MOD(I,J) =0) OR (j=i));
            j := j+1
        END LOOP
        IF LOOP;
        IF(j=i) THEN
            dbms_output,put(i); **//This line do nothing** 
        END IF;
        i := i+1
        exit WHEN i=50;
    END LOOP;
END;

但不会抹黑任何东西。

我正在使用Oracledb独立编译器/编辑器来运行it.can,任何人都会告诉我这有什么问题。

EN

回答 1

Stack Overflow用户

发布于 2022-02-19 10:15:33

我还没有听说过您正在使用的"Oracledb独立编译器/编辑器“,因此请参阅产品文档,了解如何启用DBMS输出,因为默认情况下并不总是启用它。您可能需要在PL/SQL块开始之前找到菜单栏复选框或包含一个set server output on命令。

关于代码,有几个问题阻碍了它的编译。每个语句都必须以分号结尾。此外,要用linefeed打印完整的行,您需要调用dbms_output.put_line,因为dbms_output.put只添加字符(例如,允许您增量地构建一行),并且必须后面跟着put_linenew_line才能输出任何内容。我不知道IF LOOP;打算做什么。

为了将输出显示问题与生成素数的程序逻辑分开,我建议将代码简化为最简单的再现问题的测试用例,例如,

代码语言:javascript
运行
复制
begin
    dbms_output.put_line('Hello, world!');
end;

你能查一下这个吗?你的编辑器会显示输出吗?

下面是您的代码的固定版本:

代码语言:javascript
运行
复制
declare
    i number(3) := 2;
    j number(3);
begin
    -- i := 2;  - moved to declaration
    while i < 50 loop
        j := 2;

        loop
            exit when((mod(i, j) = 0) or (j = i));
            j := j + 1; -- missing semicolon
        end loop; -- missing semicolon

        if j = i then
            dbms_output.put_line(i); -- put_line prints a line. put requires a newline
        end if;

        i := i + 1; -- missing semicolon

        -- exit when i = 50;  -- moved to loop definition
    end loop;
end;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71183668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档