我正在为学校执行一个非常简单的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;
/
答案 0 :(得分:3)
Bind variables和substitution 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_length
,d_height
和d_width
在此版本中以冒号为前缀,因为它们是绑定变量。但是d_volume
不是因为它仍然在PL / SQL块中声明。并且实际值仍在作为替换变量从用户重新获得。但这有点令人费解;使它们绑定变量并不是真的在这里添加任何东西。