前の質問への回答
に記載されているとおり 、およびAPCのコメントでは、バインド変数はここではあまり提供していませんが、演習のようです...あなたが持っているコードは、 dbms_output
でOKの値を表示します . PRINT
を使用するには
代わりに、d_volume
を宣言することはできません ブロックを終了すると範囲外になるため、PL/SQL ブロックで variable
にする必要があります。 同様に:
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_lengthprint d_heightprint d_widthprint d_volume
プレ>
set verify off
を使用した SQL*Plus の場合 粗雑さを取り除くには、次のように指定します:q_length の値を入力してください:3q_height の値を入力してください:4q_width の値を入力してください:5PL/SQL プロシージャは正常に完了しました。 D_LENGTH---------- 3 D_HEIGHT---------- 4 D_WIDTH---------- 5 D_VOLUME---------- 60SQL>コード> プレ>
不思議なことに、これは SQL Developer (3.1.07 または 3.2.20) ではまったく機能しません。行
:d_volume :=:d_length * :d_height * :d_width;
期待どおりに値を割り当てないため、null として報告されます。select :d_length * :d_height * :d_width into :d_volume from dual;
を実行できます 代わりに、「SQL ステートメントのプレースホルダー」であるため、ある程度の意味があります。:d_volume
をまだ参照できないようです ブロック内 (つまり、dbms_output
の場合は null として報告されます) それ)、しかしそれはBEGIN :d_length :=&q_length; :d_height :=&q_height; :d_width :=&q_width; :d_length * :d_height * :d_width をデュアルから :d_volume に選択します。 dbms_output.put_line('ブロック内の d_volume:' || :d_volume);END;/匿名ブロック ブロック内の完了 d_volume:D_LENGTH-3D_HEIGHT-4D_WIDTH-5D_VOLUME--60
プレ>興味深いことに、
dbms_output.put_line(':d_volume');
:ZSqlDevUnIq8
のようなものを示します SQL開発者; SQL*Plus では:d_volume
と表示されます .