Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

BIND BIND PL / SQL để tính thể tích lăng kính hình chữ nhật

Như đã lưu ý trên câu trả lời cho câu hỏi trước của bạn và trong nhận xét của APC, các biến liên kết không mang lại cho bạn nhiều điều ở đây, nhưng nó có vẻ là một bài tập, vì vậy ... Đoạn mã bạn có hiển thị các giá trị OK với dbms_output . Để sử dụng PRINT thay vào đó, bạn không thể khai báo d_volume trong khối PL / SQL vì nó sẽ nằm ngoài phạm vi khi bạn thoát khỏi khối, vì vậy bạn cần tạo biến variable đó nữa:

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

Trong SQL * Plus, với set verify off để loại bỏ một số điểm mấu chốt, hãy đưa ra:

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>

Thật kỳ lạ là điều đó không hoàn toàn hoạt động trong SQL Developer (3.1.07 hoặc 3.2.20); dòng :d_volume := :d_length * :d_height * :d_width; không chỉ định một giá trị như mong đợi, vì vậy nó được báo cáo là null. Bạn có thể thực hiện select :d_length * :d_height * :d_width into :d_volume from dual; thay vào đó, điều này có ý nghĩa vì chúng là 'trình giữ chỗ trong câu lệnh SQL'. Có vẻ như bạn vẫn không thể tham chiếu :d_volume trong khối (tức là nó được báo cáo là null nếu bạn dbms_output it), nhưng nó được hiển thị bằng 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

Thật thú vị, dbms_output.put_line(':d_volume'); hiển thị một cái gì đó như :ZSqlDevUnIq8 trong SQL Developer; trong SQL * Plus nó hiển thị :d_volume .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn dữ liệu được nhóm theo thời gian hơn nửa đêm

  2. Chuỗi kết nối Oracle cho Môi trường RAC?

  3. Mã nào có sự tương ứng trong db

  4. Nhận giá trị dựa trên giá trị tối đa của một cột khác được nhóm bởi một cột khác

  5. DB ORACLE QUERY