0

我正在为学校执行一个非常简单的 PL/SQL 程序。这很容易,但我认为我缺少一个概念。我将展示我一直在做的事情,而不仅仅是要求一个简单的答案。我想了解 DBMS_OUTPUT.PUT_LINE 的概念以及我已声明用于计算矩形棱柱或池的体积的 BIND 变量。我只是没有将它正确地声明给用户。我无法为用户找到关于 OUTPUT 的正确信息,我正在学习更多关于 INPUT 和 put_line 的信息。

所以要计算 v=lwh。我已经声明了这些变量,放在 put_line 中,并在 PL/SQL 中内置了 dbms_output 函数。我应用了这些变量的计算。我正在处理 dbms put line 语句,以显示计算和显示可变维度的 concact 语句以及如何最好地做到这一点。我在 C 语言和 Ruby 中看到过这个程序,但在 Oracle Developer 和 PL/SQL 中没有看到。

C语言计算表面积

矩形棱镜的Java程序

我会展示我的脚本,看看我做错了什么,只是不确定我是否走在正确的轨道上以更好地学习。我无法显示尺寸和正确的 conc 语句来显示这些。如何专门向用户显示输出。

感谢您的时间。

~ 编写一个 PL/SQL 块来计算一个矩形棱柱游泳池的体积。维度应该在绑定(替换)变量的帮助下提供。计算出棱镜的体积后,在屏幕上显示尺寸和体积。

v=lwh

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

不确定您希望输出的最后一行显示什么;这与已经显示的三个维度有什么不同吗?

您也可以通过使用以下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_lengthd_heightd_width以冒号为前缀,因为它们是绑定变量。但这d_volume不是因为它仍然在 PL/SQL 块中声明。并且实际值仍然作为替换变量从用户那里检索。这有点令人费解。让它们绑定变量实际上并没有在这里添加任何东西。

于 2013-02-02T23:23:21.637 回答