जब आप क्लाइंट (एसक्यूएल प्लस या एसक्यूएल डेवलपर या टॉड) का उपयोग करके सीधे एसक्यूएल चला रहे हैं, तो डेटा क्लाइंट को वापस कर दिया जाता है। जब आप पीएल/एसक्यूएल के अंदर एक ही क्वेरी चलाते हैं, तो आपको ऑरैकल को यह बताना होगा कि उस डेटा के साथ क्या करना है। आमतौर पर प्रोग्राम आगे की प्रक्रिया के लिए आउटपुट को Pl/SQL वेरिएबल में स्टोर करते हैं।
https://docs.oracle.com/cd/B19306_01 /appdev.102/b14261/selectinto_statement.htm
तो, आपके मामले में, आपको इन पंक्तियों के साथ कुछ चाहिए..
CREATE OR REPLACE PROCEDURE SPBILL (SPCLIENT_ID VARCHAR2)
AS
l_client_name clients.client_name%type;
l_room_id rooms.room_id%type;
...
l_invoice number(5,2);
BEGIN
SELECT C.CLIENT_NAME, B.ROOM_ID, R.ROOM_COST, T.TREAT_NAME, T.TREAT_COST, (ROOM_COST*(B_END_DATE-B_START_DATE)+TREAT_COST)
into l_client_name, l_room_id...l_invoice
FROM CLIENTS C, ROOMS R, TREATMENTS T, BOOKING B, PRESCRIPTION P
WHERE C.CLIENT_ID=B.CLIENT_ID
AND R.ROOM_ID=B.ROOM_ID
AND B.CLIENT_ID=P.CLIENT_ID
AND P.TREAT_ID=T.TREAT_ID
AND C.CLIENT_ID=SPCLIENT_ID;
--further processing here based on variables above.
dbms_output.put_line(l_invoice);
END SPBILL;
एक बार जब आप बिना किसी त्रुटि के संकलन कर लेते हैं, तो आप प्रक्रिया को चला सकते हैं..
set serveroutput on;
SPBILL(100);