Генерация случайных чисел в указанном диапазоне

0

Я хочу создать 10 пар случайных целых чисел в диапазоне [-4, + 4) с использованием PLSQL, а затем с помощью пары для решения основного уравнения (num1 * X + num2 = 0) и сохранить результаты в таблице, а также текстовый вывод того, какой тип результата для уравнения (решаемый/неопределенный/невозможный). Я использую Oracle LiveSQL.

Я использовал курсор, чтобы убедиться, что случайное число является целым числом.

CURSOR NUMcursor1 IS
SELECT ROUND(DBMS_RANDOM.VALUE(-4,+4),0) FROM DUAL;
num1 EquatA2.dat1%TYPE; num2 EquatA2.dat2%TYPE; 
solution EquatA2.sol%TYPE; notes EquatA2.note%TYPE;
'
'
CREATE TABLE EquatA2 
(
    dat1 NUMBER(2,0),
    dat2 NUMBER(2,0),
    sol NUMBER(6,3),
    note VARCHAR2(20)
)

DECLARE
num1 EquatA2.dat1%TYPE; num2 EquatA2.dat2%TYPE; 
solution EquatA2.sol%TYPE; notes EquatA2.note%TYPE;
i INT; i:=1;

CURSOR NUMcursor1 IS
SELECT ROUND(DBMS_RANDOM.VALUE(-4,+4),0) FROM DUAL;

CURSOR NUMcursor2 IS
SELECT ROUND(DBMS_RANDOM.VALUE(-4,+4),0) FROM DUAL;

BEGIN 

OPEN NUMcursor1;
OPEN NUMcursor2;

FOR i IN 1..10
LOOP

FETCH NUMcursor1 INTO num1;
EXIT WHEN NUMcursor1%NOTFOUND;

FETCH NUMcursor2 INTO num2;
EXIT WHEN NUMcursor2%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(num1);
DBMS_OUTPUT.PUT_LINE(num2);

IF (num1 != 0) THEN solution := -num2 / num1 AND notes := 'solvable';
ELSIF (num1 == 0 AND num2 == 0) THEN notes := 'indefinite';
ELSIF (num1 == 0 AND num2 != 0) THEN notes := 'impossible';
END IF;

INSERT INTO EquatA2 VALUES(num1,num2,solution,notes);

END LOOP;

END;
'

"Ожидаемые результаты: 10 текстовых выходов и диапазон случайных чисел, которые будут [-4, + 4)

Фактические результаты (ошибки): ORA-00922: missing or invalid option Invalid statement Unsupported Command Invalid statement Result Set 6 ROUND(DBMS_RANDOM.VALUE(-4,+4),0) -2 Download CSV Invalid statement Result Set 7 ROUND(DBMS_RANDOM.VALUE(-4,+4),0) -3 Download CSV ORA-06550: line 18, column 56: PLS-00103: Encountered the symbol "=" when expecting one of the following:. ( * @% & = - +; </> at in is mod remainder not rem <an exponent (**)> <> or != or ~=>= <= <> and or like like2 like4 likec between || multiset member submultiset The symbol "* was inserted before "=" to continue. ORA-00922: missing or invalid option Invalid statement Unsupported Command Invalid statement Result Set 6 ROUND(DBMS_RANDOM.VALUE(-4,+4),0) -2 Download CSV Invalid statement Result Set 7 ROUND(DBMS_RANDOM.VALUE(-4,+4),0) -3 Download CSV ORA-06550: line 18, column 56: PLS-00103: Encountered the symbol "=" when expecting one of the following:. ( * @% & = - +; </> at in is mod remainder not rem <an exponent (**)> <> or != or ~=>= <= <> and or like like2 like4 likec between || multiset member submultiset The symbol "* was inserted before "=" to continue.

  • 0
    CURSOR - это объявление PL / SQL, поэтому оно может существовать только в разделе объявлений блока PL / SQL.
Теги:
plsql

1 ответ

0

Я изменил ваш код, чтобы он работал. Ну вот.

Таблица:

SQL> CREATE TABLE EquatA2
  2  (
  3      dat1 NUMBER(2,0),
  4      dat2 NUMBER(2,0),
  5      sol  NUMBER(6,3),
  6      note VARCHAR2(20)
  7  );

Table created.

SQL>

PL/SQL анонимная процедура:

SQL> DECLARE
  2    num1     EquatA2.dat1%TYPE;
  3    num2     EquatA2.dat2%TYPE;
  4    solution EquatA2.sol%TYPE;
  5    notes    EquatA2.note%TYPE;
  6  BEGIN
  7    delete from equata2;
  8    FOR i IN 1..10 LOOP
  9      num1 := ROUND(DBMS_RANDOM.VALUE(-4, +4), 0);
 10      num2 := ROUND(DBMS_RANDOM.VALUE(-4, +4), 0);
 11      -- DBMS_OUTPUT.PUT_LINE(num1);
 12      -- DBMS_OUTPUT.PUT_LINE(num2);
 13
 14      IF num1 != 0 THEN
 15          solution := -num2 / num1;
 16          notes := 'solvable';
 17      ELSIF num1 = 0 AND num2 = 0 THEN
 18         notes := 'indefinite';
 19      ELSIF num1 = 0 AND num2 != 0
 20        THEN notes := 'impossible';
 21      END IF;
 22
 23      INSERT INTO EquatA2 VALUES (num1, num2, solution, notes);
 24    END LOOP;
 25  END;
 26  /

PL/SQL procedure successfully completed.

Результат:

SQL> select * from equata2;

      DAT1       DAT2        SOL NOTE
---------- ---------- ---------- --------------------
         1         -4          4 solvable
        -1          0          0 solvable
         0          3          0 impossible
         0          2          0 impossible
         0          0          0 indefinite
         3         -1       ,333 solvable
         4          3       -,75 solvable
         1         -1          1 solvable
        -1         -2         -2 solvable
         2          3       -1,5 solvable

10 rows selected.

SQL>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню