如何要求用户输入另一个值,直到用户在plsql中只输入正数

如何要求用户输入另一个值,直到用户在plsql中只输入正数,plsql,plsqldeveloper,Plsql,Plsqldeveloper,尽管我提到它应该只在输入大于零时退出,但循环只执行一次。在您的逻辑中,过程没有返回值 它以一个例外而告终 DECLARE lv_input NUMBER; BEGIN LOOP lv_input := &num findSquareRoot(lv_input); EXIT WHEN lv_input > 0; END LOOP; end; 创建或替换过程findSquareRoot (v_num输入输出编号) 开始 如果

尽管我提到它应该只在输入大于零时退出,但循环只执行一次。

在您的逻辑中,
过程没有返回值
它以一个例外而告终

DECLARE
  lv_input  NUMBER;
BEGIN
   LOOP
       lv_input := &num
       findSquareRoot(lv_input);
       EXIT WHEN lv_input > 0;
   END LOOP;
end;
创建或替换过程findSquareRoot
(v_num输入输出编号)
开始

如果(v_num如您所知,PL/SQL在这里帮不上忙

如果您使用的是MS Windows,您可以使用一个简单的批处理脚本

  • 批处理脚本将要求用户输入一个值,并将继续这样做,直到输入正数
  • 满足上述条件后,它将运行SQL*Plus并调用运行该过程的.SQL脚本,并传递用户输入的参数
以下是脚本:

SQROOT.BAT

CREATE OR REPLACE PROCEDURE findSquareRoot 
 ( v_num in out NUMBER)

    BEGIN
        if(v_num<0) then
            v_num:=0;
        else
            v_num:=1;
        end if;
    EXCEPTION
     WHEN others THEN
          dbms_outout.put_line(sqlcode);
    END;
SQROOT.SQL

@echo off
:repeat
set /p numb="Enter a positive number : "
if %numb% lss 0 goto :repeat
sqlplus scott/tiger@orcl @sqroot %numb%
您的程序

set serveroutput on
exec findSquareRoot(&1)

这并不完美,可以/应该改进,但是-简单地说,我希望您能理解。

根据要求,如果用户输入的数字小于0,我应该抛出一个异常,并提示用户提供另一个值否。这是不可能的,您不能像这样在PL/SQL中运行交互式程序。每个exe只能接受一次输入脚本的执行,仅此而已。您可以使用shell脚本来执行您正在尝试的操作。
set serveroutput on
exec findSquareRoot(&1)
CREATE OR REPLACE PROCEDURE findsquareroot (v_num IN NUMBER)
IS
   negative_number   EXCEPTION;
BEGIN
   IF (v_num < 0)
   THEN
      RAISE negative_number;
   ELSE
      DBMS_OUTPUT.put_line (
         'Square root of ' || v_num || ' is ' || SQRT (v_num));
   END IF;
EXCEPTION
   WHEN negative_number
   THEN
      raise_application_error (-20989, 'Please provide a valid number');
END;
/
M:\>sqroot
Enter a positive number : -2
Enter a positive number : 25

SQL*Plus: Release 11.2.0.1.0 Production on Pon Lip 11 08:35:47 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

Square root of 25 is 5

PL/SQL procedure successfully completed.

SQL>