2013-02-02 37 views
0

我正在爲學校執行一個非常簡單的PL/SQL程序。這很容易,但我認爲我錯過了一個概念。我將展示我一直在努力的工作,而不是要求簡單的答案。我想理解DBMS_OUTPUT.PUT_LINE的概念,以及我已經聲明計算矩形棱柱的體積或說池的BIND變量。我只是沒有適當地聲明給用戶。我無法在用戶的OUTPUT上找到正確的信息,我在INPUT和put_line上了解了一些。在PL/SQL中學習綁定變量以及計算輸入和輸出DBMS_OUTPUT.PUT_LINE

所以要計算v = lwh。我已經在put_line中聲明瞭這些變量,內置了PL/SQL中的dbms_output函數。我應用了這些變量的計算。我正在處理dbms放行語句,以顯示計算和顯示變量維度的concact語句以及如何最好地執行此操作。我已經在C語言和Ruby中看到過這個程序,但是沒有在Oracle Developer和PL/SQL中看到。

C Language Calculate Surface Area

Java Program for Rectangular Prism

我會告訴我的劇本,看到我在做什麼不正確,只是不知道如果我在正確的軌道上更好地學習。我無法顯示尺寸和正確的語句顯示這些。如何將輸出顯示給用戶。

謝謝你的時間。

〜寫一個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

似乎這可能會幫助我一點,仍然在輸出,但是這個網站可能會幫助我,因爲我正在處理它。我也找到了一個很好的參考網站。 http://www.tutorialspoint.com/plsql/plsql_constants.htm以及Java2s.com和oracle引用。 – MeachamRob

回答

3

Bind variablessubstitution variables是不同的東西,所以這個問題措辭誤導。這只是綁定變量的SQL * Plus版本;它可能與解析器有一點不同(或至少不太明顯)的含義。

從本質上講,您正在使用SQL * Plus替換變量混淆PL/SQL變量。當您參考&d_length時,您正在定義一個替代變量,並且在此時將提示用戶輸入它的值。但它完全獨立於PL/SQL DECLARE塊中的d_length

你可以看一下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塊中聲明。實際值仍然是用戶作爲替代變量進行回顧。這雖然有點複雜,使它們綁定變量並不是真的在這裏添加任何東西。

+0

對我來說看起來不錯,這是我改變的一些代碼,以匹配我認爲模糊問題所要求的內容。謝謝您的幫助。 d_volume:= d_length * d_height * d_width; DBMS_OUTPUT.PUT_LINE( '游泳池的矩形棱柱體積爲:' || d_volume ||'立方英尺'。 ); DBMS_OUTPUT.PUT_LINE( '游泳池的尺寸是' || d_length || '由腳' || d_高|| '英尺乘' || || d_寬 ''); END; / – MeachamRob

+0

當我執行BIND VARIABLE CODE的變量部分時,它不會打印出體積計算和尺寸。我不知道如何修復這部分代碼。當您運行該腳本時,它不會輸出綁定變量。我的文字說他們必須在結束後打印,但這對我也不適用。我知道不同版本的SQL編碼是不同的,並且正確使用替換變量。然而你的BIND變量沒有正確地打印出來。不知道爲什麼。這是你的代碼VARIABLE部分的第二個版本。 – MeachamRob

+0

@MeachamRob - 不確定你的意思,對我來說工作正常....你仍然在'set serveroutput on'步驟中,對吧? –