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

Nauka zmiennych wiązania w PL/SQL wraz z obliczaniem danych wejściowych i wyjściowych DBMS_OUTPUT.PUT_LINE

Powiąż zmienne i zmienne podstawienia to różne rzeczy, więc sformułowanie problemu jest mylące. A to tylko wersja SQL*Plus zmiennych wiązania; może mieć nieco inne (lub przynajmniej mniej oczywiste) znaczenie dla parsera.

Zasadniczo mylisz zmienne PL/SQL ze zmiennymi podstawienia SQL*Plus. Kiedy odwołujesz się do &d_length definiujesz zmienną podstawienia, a użytkownik zostanie w tym momencie poproszony o podanie jej wartości. Ale jest całkowicie niezależny od d_length w PL/SQL DECLARE blokować.

Możesz spojrzeć na AKCEPTUJ polecenie, aby w zgrabny sposób uzyskać wartości od użytkownika przed rozpoczęciem blokowania, ale możesz to zrobić również w ten sposób:

SET SERVEROUTPUT ON
DECLARE
    d_length    NUMBER := &q_length;
    d_height    NUMBER := &q_height;
    d_width     NUMBER := &q_width;
    d_volume    NUMBER;
BEGIN
    DBMS_OUTPUT.PUT_LINE('The length dimension is: ' || d_length);
    DBMS_OUTPUT.PUT_LINE('The height dimension is: ' || d_height);
    DBMS_OUTPUT.PUT_LINE('The width dimension is: ' || d_width);  

    d_volume := d_length * d_height * d_width;

    DBMS_OUTPUT.PUT_LINE(
        'The rectangular prism volume for the swimming pool is: ' 
           || d_volume);

   DBMS_OUTPUT.PUT_LINE(
       'The dimensions of the swimming pool are ' || '?');
END;
/

Nie jestem pewien, co ma pokazać ostatnia linia danych wyjściowych; czy to różni się od trzech już pokazanych wymiarów?

Możesz to również zrobić za pomocą zmiennych wiązania, definiując je za pomocą ZMIENNA polecenie :

SET SERVEROUTPUT ON
VARIABLE d_length NUMBER;
VARIABLE d_height NUMBER;
VARIABLE d_width NUMBER;

DECLARE 
    d_volume    NUMBER;
BEGIN
    :d_length := &q_length;
    :d_height := &q_height;
    :d_width := &q_width;

    DBMS_OUTPUT.PUT_LINE('The length dimension is: ' || :d_length);
    DBMS_OUTPUT.PUT_LINE('The height dimension is: ' || :d_height);
    DBMS_OUTPUT.PUT_LINE('The width dimension is: ' || :d_width);  

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

    DBMS_OUTPUT.PUT_LINE(
        'The rectangular prism volume for the swimming pool is: ' 
           || d_volume);

   DBMS_OUTPUT.PUT_LINE(
       'The dimensions of the swimming pool are ' || '?');
END;
/

Zauważ, że d_length , d_wysokość i d_width w tej wersji są poprzedzone dwukropkiem, ponieważ są to zmienne wiążące. Ale d_volume nie dlatego, że jest to nadal zadeklarowane w bloku PL/SQL. Rzeczywiste wartości są nadal pobierane od użytkownika jako zmienne zastępcze. Jest to jednak nieco zawiłe; łączenie ich ze zmiennymi tak naprawdę niczego tutaj nie dodaje.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy sterownik zarządzany Oracle może prawidłowo używać asynchronicznego/oczekiwania?

  2. Skróć datę do roku obrotowego

  3. Oracle SELECT QUERY dla relacji jeden do wielu między dwiema tabelami

  4. Jak prawidłowo używać AddBatch/withBatch do zbiorczego wstawiania wartości tagu xml do tabeli bazy danych?

  5. Usługa danych Oracle REST apex_pu