Как вам сказали, PL / SQL здесь не поможет.
Если вы работаете в MS Windows, вы можете сделать это с помощью простого пакетного сценария.Вот как.
- пакетный скрипт попросит пользователя ввести значение и будет продолжать это делать до тех пор, пока не будет введено положительное число
- , как только вышеуказанное условие выполнено, он запускает SQL *Плюс и вызывает сценарий .SQL, который запускает процедуру, передавая параметр, введенный пользователем
Вот сценарии:
SQROOT.BAT
@echo off
:repeat
set /p numb="Enter a positive number : "
if %numb% lss 0 goto :repeat
sqlplus scott/tiger@orcl @sqroot %numb%
SQROOT.SQL
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>
Это не идеально и может / должно быть улучшено, но - для краткости, надеюсь, у вас есть идея.