我已经研究过这个问题并让它适用于声明的替换变量,但是我无法正确计算BIND变量。我被告知它与SQL * PLUS和Oracle的开发人员混淆。这是我正确回答的初始问题,但BIND变量部分无法正常工作。 Learning Bind Variables Question
所以我有那个使用替换变量来计算矩形棱镜体积的代码,但是想要使用这样声明的BIND变量。我的教科书说我必须在结束后使用PRINT和打印; / command并没有显示dbms_output,因此可能存在问题。这不是一种非常实用的做事方式,我明白了。
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;
/
所以我的问题是,如何让它与BIND变量一起工作,我将变量放在块外面作为VARIABLES,然后声明d_volume,执行该计算,并使用这些绑定变量打印游泳池的体积。我在附近,但有些事情已经结束了。它打印出dbms_output语句,但没有显示任何变量。
答案 0 :(得分:0)
正如the answer to your previous question所述,在APC的评论中,绑定变量在这里没有给你太多,但它似乎是一个练习,所以...你所拥有的代码显示值{{{ 1}}。要改为使用PRINT
,您不能在PL / SQL块中声明dbms_output
,因为当您退出块时它将超出范围,因此您需要将其设为d_volume
}以及:
variable
在SQL * Plus中,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
删除了一些错误,给出了:
set verify off
奇怪的是,这在SQL Developer(3.1.07或3.2.20)中并不常用;行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>
未按预期分配值,因此报告为null。您可以改为:d_volume := :d_length * :d_height * :d_width;
,这有点意义,因为它们是“SQL语句中的占位符”。您似乎仍然无法在块中引用select :d_length * :d_height * :d_width into :d_volume from dual;
(例如,如果您:d_volume
,则报告为空),但它由dbms_output
显示。
print
有趣的是,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
在SQL Developer中显示了类似dbms_output.put_line(':d_volume');
的内容;在SQL * Plus中,它显示:ZSqlDevUnIq8
。