学习PL / SQL中的绑定变量以及计算输入和输出DBMS_OUTPUT.PUT_LINE

时间:2013-02-02 22:34:49

标签: database oracle plsql oracle11g

我正在为学校执行一个非常简单的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 Language Calculate Surface Area

Java Program for Rectangular Prism

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

感谢您的时间。

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

V =长宽高

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

1 个答案:

答案 0 :(得分:3)

Bind variablessubstitution variables是不同的东西,因此问题措辞具有误导性。这就是绑定变量的SQL * Plus版本;它可以与解析器略有不同(或至少不那么明显)的含义。

基本上,您将PL / SQL变量与SQL * Plus替换变量混淆。当您引用&d_length时,您正在定义替换变量,并且将在该点提示用户输入其值。但它完全独立于PL / SQL d_length块中的DECLARE

您可以在开始阻止之前查看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 command

定义绑定变量来实现它
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块中声明。并且实际值仍在作为替换变量从用户重新获得。但这有点令人费解;使它们绑定变量并不是真的在这里添加任何东西。