用于矩形棱柱体体积计算的PL/SQL绑定变量

用于矩形棱柱体体积计算的PL/SQL绑定变量,sql,oracle,plsql,Sql,Oracle,Plsql,我已经解决了这个问题,并使它对声明的替换变量正常工作,但是我很难让它对绑定变量正确计算。我听说它与SQL*PLUS和Oracle的开发人员混淆了。这是我最初的问题,答案是正确的,但是BIND变量部分不起作用。 我有一段代码,它使用替换变量计算矩形棱柱体的体积,但我想使用像这样声明的绑定变量。我的课本上说我必须使用打印和结束后打印;/命令,但不显示dbms_输出,因此可能会出现问题。我明白这不是一种非常实际的做事方式 SET SERVEROUTPUT ON VARIABLE d_length N

我已经解决了这个问题,并使它对声明的替换变量正常工作,但是我很难让它对绑定变量正确计算。我听说它与SQL*PLUS和Oracle的开发人员混淆了。这是我最初的问题,答案是正确的,但是BIND变量部分不起作用。

我有一段代码,它使用替换变量计算矩形棱柱体的体积,但我想使用像这样声明的绑定变量。我的课本上说我必须使用打印和结束后打印;/命令,但不显示dbms_输出,因此可能会出现问题。我明白这不是一种非常实际的做事方式

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

END;
/
所以我的问题是,如何让它与绑定变量一起工作,我把变量放在块外作为变量,然后声明d_体积,执行该计算,并使用这些绑定变量打印出游泳池的体积。我离这里很近,但有点不对劲。它打印出dbms_输出语句,但不显示变量的任何内容。

如上所述,在APC的评论中,绑定变量在这里没有给您太多的帮助,但它似乎是一个练习,所以。。。您拥有的代码显示了dbms\U输出的OK值。要改为使用,您不能在PL/SQL块中声明
d_volume
,因为退出块时它将超出范围,因此您还需要将其设置为
变量

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
在SQL*Plus中,使用
设置verify off
以去除一些积垢,它给出:

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>
奇怪的是,这在SQLDeveloper(3.1.07或3.2.20)中不太起作用;行
:d_体积:=:d_长度*:d_高度*:d_宽度未按预期分配值,因此报告为null。你可以做
选择:d_长度*:d_高度*:d_宽度,从dual中选择:d_体积:d_卷
(即,如果
dbms_输出
它,它将报告为null),但它通过
打印
显示

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


有趣的是,
dbms_output.put_line(':d_volume')在SQL Developer中显示类似于
:ZSqlDevUnIq8
的内容;在SQL*Plus中,它显示
:d_volume

绑定变量是SQL语句中的占位符。这里没有SQL,所以根本不清楚您的最终目标是什么。