Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ZMIENNE WIĄZANIA PL/SQL do obliczania objętości pryzmatu prostokątnego

Jak wspomniano w odpowiedzi na Twoje poprzednie pytanie , a w komentarzu APC zmienne bind nie dają tu wiele, ale wydaje się to być ćwiczeniem, więc... Kod, który masz wyświetla wartości OK za pomocą dbms_output . Aby użyć PRINT zamiast tego nie możesz zadeklarować d_volume w bloku PL/SQL, ponieważ będzie poza zakresem po wyjściu z bloku, więc musisz ustawić go jako variable a także:

VARIABLE d_length NUMBER;
VARIABLE d_height NUMBER;
VARIABLE d_width NUMBER;
VARIABLE d_volume NUMBER;

BEGIN
    :d_length := &q_length;
    :d_height := &q_height;
    :d_width := &q_width;

    :d_volume := :d_length * :d_height * :d_width;
END;
/

print d_length
print d_height
print d_width
print d_volume

Które w SQL*Plus, z set verify off aby usunąć trochę cruft, daje:

Enter value for q_length: 3
Enter value for q_height: 4
Enter value for q_width: 5

PL/SQL procedure successfully completed.


  D_LENGTH
----------
         3


  D_HEIGHT
----------
         4


   D_WIDTH
----------
         5


  D_VOLUME
----------
        60

SQL>

Co ciekawe, nie do końca działa to w SQL Developer (3.1.07 lub 3.2.20); wiersz :d_volume := :d_length * :d_height * :d_width; nie przypisuje wartości zgodnie z oczekiwaniami, więc jest zgłaszana jako null. Możesz select :d_length * :d_height * :d_width into :d_volume from dual; zamiast tego, co ma sens, ponieważ są one „wypełniaczami w instrukcjach SQL”. Wygląda na to, że nadal nie możesz odwołać się do :d_volume wewnątrz bloku (tzn. jest zgłaszane jako null, jeśli dbms_output to), ale jest to pokazane przez print .

BEGIN
    :d_length := &q_length;
    :d_height := &q_height;
    :d_width := &q_width;

    select :d_length * :d_height * :d_width into :d_volume from dual;
    dbms_output.put_line('d_volume inside the block: ' || :d_volume);
END;
/

anonymous block completed
d_volume inside the block: 

D_LENGTH
-
3

D_HEIGHT
-
4

D_WIDTH
-
5

D_VOLUME
--
60

Co ciekawe, dbms_output.put_line(':d_volume'); pokazuje coś w stylu :ZSqlDevUnIq8 w SQL Developer; w SQL*Plus pokazuje :d_volume .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaktualizuj instrukcję za pomocą klauzuli

  2. Partycja Oracle według słowa kluczowego

  3. Zdefiniuj typ rekordu w bloku PL/SQL, który odwołuje się do swojej kolekcji

  4. Oracle SQL — DENSE_RANK

  5. Regularna, powtarzająca się interakcja między wyrocznią a inteligentnym kontraktem