用于矩形棱柱体体积计算的PL/SQL绑定变量
我已经解决了这个问题,并使它对声明的替换变量正常工作,但是我很难让它对绑定变量正确计算。我听说它与SQL*PLUS和Oracle的开发人员混淆了。这是我最初的问题,答案是正确的,但是BIND变量部分不起作用。 我有一段代码,它使用替换变量计算矩形棱柱体的体积,但我想使用像这样声明的绑定变量。我的课本上说我必须使用打印和结束后打印;/命令,但不显示dbms_输出,因此可能会出现问题。我明白这不是一种非常实际的做事方式用于矩形棱柱体体积计算的PL/SQL绑定变量,sql,oracle,plsql,Sql,Oracle,Plsql,我已经解决了这个问题,并使它对声明的替换变量正常工作,但是我很难让它对绑定变量正确计算。我听说它与SQL*PLUS和Oracle的开发人员混淆了。这是我最初的问题,答案是正确的,但是BIND变量部分不起作用。 我有一段代码,它使用替换变量计算矩形棱柱体的体积,但我想使用像这样声明的绑定变量。我的课本上说我必须使用打印和结束后打印;/命令,但不显示dbms_输出,因此可能会出现问题。我明白这不是一种非常实际的做事方式 SET SERVEROUTPUT ON VARIABLE d_length N
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_体积相反,这是有意义的,因为它们是“SQL语句中的占位符”。然后,您似乎仍然无法在块内引用: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,所以根本不清楚您的最终目标是什么。