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

PL/SQL BIND PROMĚNNÉ pro výpočet objemu obdélníkového hranolu

Jak je uvedeno v odpovědi na vaši předchozí otázku , a v komentáři APC vám zde proměnné vazby moc nedávají, ale zdá se, že je to cvičení, takže... Kód, který máte, zobrazuje hodnoty OK pomocí dbms_output . Chcete-li použít PRINT místo toho nemůžete deklarovat d_volume v bloku PL/SQL, protože to bude mimo rozsah, když blok opustíte, takže z toho musíte udělat variable také:

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

Což v SQL*Plus, s set verify off k odstranění nějakého cruftu dává:

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>

Je zvláštní, že to v SQL Developer (3.1.07 nebo 3.2.20) úplně nefunguje; řádek :d_volume := :d_length * :d_height * :d_width; nepřiřadí hodnotu podle očekávání, takže je hlášena jako null. Můžete select :d_length * :d_height * :d_width into :d_volume from dual; místo toho, což dává určitý smysl, protože jsou „zástupnými symboly v příkazech SQL“. Zdá se, že stále nemůžete odkazovat na :d_volume v rámci bloku (tj. je nahlášeno jako null, pokud dbms_output it), ale zobrazí se pomocí 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

Zajímavé je, že dbms_output.put_line(':d_volume'); zobrazuje něco jako :ZSqlDevUnIq8 v SQL Developer; v SQL*Plus ukazuje :d_volume .




  1. Jak převést výsledkovou tabulku na pole JSON v MySQL

  2. Převést číslo měsíce na název měsíce v SQL Server (T-SQL)

  3. Jak vyřešit paket příliš velkou výjimkou XAMPP Mysql

  4. provedla uloženou proceduru Oracle ze serveru SQL pomocí funkce otevřeného dotazu