Biến ràng buộc và biến thay thế là những thứ khác nhau, do đó, cách diễn đạt vấn đề dễ gây hiểu nhầm. Và đó chỉ là phiên bản SQL * Plus của các biến liên kết; nó có thể có ý nghĩa hơi khác (hoặc ít nhất là ít rõ ràng hơn) đối với trình phân tích cú pháp.
Chắc chắn bạn đang nhầm lẫn giữa các biến PL / SQL với các biến thay thế SQL * Plus. Khi bạn tham chiếu &d_length
bạn đang xác định một biến thay thế và người dùng sẽ được nhắc nhập giá trị của nó tại thời điểm đó. Nhưng nó hoàn toàn độc lập với d_length
trong PL / SQL DECLARE
khối.
Bạn có thể xem CHẤP NHẬN
lệnh cho một cách gọn gàng để nhận các giá trị từ người dùng trước khi bạn bắt đầu chặn, nhưng bạn cũng có thể làm như thế này:
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;
/
Không chắc chắn những gì bạn muốn dòng đầu ra cuối cùng hiển thị; điều đó có khác với ba thứ nguyên đã được hiển thị không?
Bạn cũng có thể làm điều đó với các biến ràng buộc bằng cách xác định chúng bằng VARIABLE
lệnh
:
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;
/
Lưu ý rằng d_length
, d_height
và d_width
được bắt đầu bằng dấu hai chấm trong phiên bản này, vì đó là các biến liên kết. Nhưng d_volume
không phải vì điều đó vẫn được khai báo trong khối PL / SQL. Và các giá trị thực tế vẫn đang được lấy lại từ người dùng dưới dạng các biến thay thế. Tuy nhiên, điều này hơi phức tạp; khiến chúng thực sự không thêm bất cứ thứ gì vào đây.