簡體   English   中英

使用 PL/SQL 塊打印文本和計算結果時 DBMS 輸出出錯

[英]Error on DBMS output while printing text and calculated result using PL/SQL block

我正在使用 Oracle SQL 開發人員制作 PL/SQL 代碼。 我的代碼是使用 DBMS_Output 中的數學公式打印數據。 但是,以 DBMS_OUTPUT.PUT_LINE 開頭的代碼都是灰色的,並且不打印任何內容。 我已經通過單擊查看 -> DBMS 輸出 -> 加 -> 連接到服務器來使用 DBMS 輸出,所以我認為禁用 DBMS 輸出不是問題。 你能幫我嗎?

DECLARE
type Receipt is record(
productID PRODUCTS.PRODUCTID%type,
productName PRODUCTS.PRODUCTNAME%type,
numOfProduct PRODUCTS.UNITSONORDER%type,
unitPrice PRODUCTS.UNITPRICE%type);
receipt Receipt;
BEGIN
    select PRODUCTID,PRODUCTNAME, UNITSONORDER, UNITPRICE
    into receipt
    from PRODUCTS where PRODUCTID = 1;
    
DBMS_OUTPUT.PUT_LINE('Product ID : '|| receipt.productID);
DBMS_OUTPUT.PUT_LINE('Product Name : '|| receipt.productName);
DBMS_OUTPUT.PUT_LINE('Number of orders : '|| receipt.numOfProduct);
DBMS_OUTPUT.PUT_Line('Unit price : '|| receipt.unitPrice);
DBMS_OUTPUT.PUT_Line('sub-total'|| receipt.unitPrice);
DBMS_OUTPUT.PUT_Line('Taxes = '|| receipt.unitPrice*(13/100));
DBMS_OUTPUT.PUT_Line('Total Payment = '|| receipt.unitPrice*(13/100)+(receipt.unitPrice));
END;

當您嘗試運行此代碼時,您應該會遇到許多語法錯誤,因為您無法聲明記錄類型receipt和聲明局部變量receipt 只允許一份receipt聲明。 也許您來自一種區分大小寫的編程語言,其中Receiptreceipt將是不同的標識符?

如果我們將類型聲明更改為不同的標識符receipt_rec ,那么您的代碼大部分都會編譯。 你只需要在最后一個問題dbms_output因為Oracle認為你想的一切增加了離開的通話+標志的右邊的值+符號,而不是做算術然后連接該字符串文本. 我會將整個計算包裝在to_char但只需添加括號以強制您想要的操作順序就足夠了。 通常,將數值計算放入一個單獨的局部變量並打印出該局部變量會更有意義。

DECLARE
type Receipt_rec is record(
  productID PRODUCTS.PRODUCTID%type,
  productName PRODUCTS.PRODUCTNAME%type,
  numOfProduct PRODUCTS.UNITSONORDER%type,
  unitPrice PRODUCTS.UNITPRICE%type);
receipt Receipt_rec;
BEGIN
    select PRODUCTID,PRODUCTNAME, UNITSONORDER, UNITPRICE
    into receipt
    from PRODUCTS where PRODUCTID = 1;
    
DBMS_OUTPUT.PUT_LINE('Product ID : '|| receipt.productID);
DBMS_OUTPUT.PUT_LINE('Product Name : '|| receipt.productName);
DBMS_OUTPUT.PUT_LINE('Number of orders : '|| receipt.numOfProduct);
DBMS_OUTPUT.PUT_Line('Unit price : '|| receipt.unitPrice);
DBMS_OUTPUT.PUT_Line('sub-total'|| receipt.unitPrice);
DBMS_OUTPUT.PUT_Line('Taxes = '|| receipt.unitPrice*(13/100));
DBMS_OUTPUT.PUT_Line('Total Payment = '|| ( receipt.unitPrice*(13/100)+(receipt.unitPrice) ));
END;
/

這是一個 dbfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM