0

学校向けに非常に単純な PL/SQL プログラムを実行しています。とても簡単ですが、コンセプトが欠けていると思います。簡単な答えを求めるだけでなく、私が取り組んできたことを示します。DBMS_OUTPUT.PUT_LINE の概念と、直角プリズムまたはプールの体積を計算するために宣言した BIND 変数を理解したいと思います。ユーザーに適切に宣言されていないだけです。ユーザーへの OUTPUT に関する正しい情報を見つけるのに苦労しています。INPUT と put_line についてもう少し学習しています。

したがって、v=lwh を計算します。PL/SQLに組み込まれたdbms_output関数を使用して、これらの変数を宣言し、put_lineに入力しました。これらの変数の計算を適用しました。私は、dbms put line ステートメントに取り組んで、計算と concact ステートメントを表示し、変数のディメンションを表示し、それを行う最善の方法を示しています。このプログラムは C 言語と Ruby で見たことがありますが、Oracle Developer と PL/SQL では見たことがありません。

C言語で表面積を計算

直角プリズムの Java プログラム

スクリプトを表示して、何が間違っているかを確認します。よりよく学ぶために正しい方向に進んでいるかどうかはわかりません。寸法を表示するのに問題があり、それらを表示する正しい conc ステートメントがあります。具体的にユーザーに出力を表示する方法。

お時間をいただきありがとうございます。

~ 四角柱のプールの体積を計算する PL/SQL ブロックを作成します。ディメンションは、バインド (置換) 変数を使用して提供する必要があります。プリズムの体積が計算されたら、寸法と体積を画面に表示します。

v=lw

 SET SERVEROUTPUT ON
 DECLARE
     d_length    NUMBER(7);
     d_height    NUMBER(7);  
     d_width     NUMBER(7);
     d_volume    NUMBER(15);  

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));   ---don't know how to get output to user

   DBMS_OUTPUT.PUT_LINE(
   'The dimensions of the swimming pool are ' || ;    ---missing code here 


 END;
 / 
4

1 に答える 1

3

バインド変数置換変数は別のものなので、問題の表現は誤解を招きます。これはバインド変数の SQL*Plus バージョンにすぎません。パーサーにとっては、わずかに異なる (または少なくともあまり明白ではない) 意味を持つ可能性があります。

基本的に、PL/SQL 変数と SQL*Plus 置換変数を混同しています。参照&d_lengthすると、置換変数が定義され、ユーザーはその時点でその値を求められます。ただしd_length、PL/SQLDECLAREブロック内の からは完全に独立しています。

ACCEPTブロックを開始する前に、ユーザーから値を取得する適切な方法についてコマンドを確認できますが、次のようにすることもできます。

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

出力の最後の行に何を表示したいかわかりません。それは、すでに示した 3 つの次元とは異なりますか?

VARIABLE次のコマンドでバインド変数を定義することで、バインド変数を使用して実行することもできます。

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

d_lengthこのバージョンでは、d_heightd_widthの前にコロンが付いていることに注意してください。これらはバインド変数であるためです。しかしd_volume、それはまだ PL/SQL ブロックで宣言されているためではありません。実際の値は、置換変数として引き続きユーザーから取得されます。ただし、これは少し複雑です。それらを変数にバインドしても、実際には何も追加されません。

于 2013-02-02T23:23:21.637 に答える