如何要求用户输入另一个值,直到用户在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>