sql >> Databáze >  >> RDS >> Oracle

Učení proměnných vazeb v PL/SQL spolu se vstupem a výstupem výpočtu DBMS_OUTPUT.PUT_LINE

Vázat proměnné a substituční proměnné jsou různé věci, takže formulace problému je zavádějící. A to je pouze verze SQL*Plus vazebných proměnných; může mít mírně odlišný (nebo alespoň méně zřejmý) význam než analyzátor.

V podstatě si pletete proměnné PL/SQL se substitučními proměnnými SQL*Plus. Když odkazujete na &d_length definujete substituční proměnnou a uživatel bude v tomto okamžiku vyzván k zadání její hodnoty. Ale je zcela nezávislý na d_length v PL/SQL DECLARE blokovat.

Můžete se podívat na AKCEPTOVAT příkaz pro úhledný způsob, jak získat hodnoty od uživatele, než začnete blokovat, ale můžete to udělat i takto:

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;
/

Nejste si jisti, co chcete, aby se zobrazil poslední řádek výstupu; liší se to od tří již zobrazených rozměrů?

Můžete to také udělat s proměnnými vazby tak, že je definujete pomocí VARIABILNÍ příkaz :

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;
/

Všimněte si, že d_length , d_height a d_width mají v této verzi předponu dvojtečka, protože se jedná o proměnné vazby. Ale d_volume není proto, že je stále deklarován v bloku PL/SQL. A skutečné hodnoty jsou stále získávány od uživatele jako substituční proměnné. To je však trochu zamotané; jejich vytvoření vazby proměnných zde ve skutečnosti nic nepřidává.




  1. Připojení jednoho stolu k mnoha stolům

  2. plsql block pro získání výsledku dynamického SQL dotazu

  3. PHP/MySQLi:NASTAVIT lc_time_names a DATE_FORMAT() do dotazu mysqli?

  4. Použijte IDENT_CURRENT() k vrácení aktuální hodnoty identity ve sloupci identity na serveru SQL Server