Short interpretation and issues:
- CHR(99) is the character 'c'. So CHR(99)||CHR(99)||CHR(99) = 'ccc'. The pipe name would be 'CCC' (Oracle uppercases pipe names).
- DBMS_PIPE.RECEIVE_MESSAGE expects arguments like: DBMS_PIPE.RECEIVE_MESSAGE(pipename IN VARCHAR2, message OUT VARCHAR2, timeout IN PLS_INTEGER) or similar three-argument form.
- Your call passes only two arguments, and the second argument is 28.39 (a decimal). The second argument should be a variable to receive the message (not a number), and the timeout should be an integer.
- As written, this code will not compile/execute correctly.
Correct usage examples:
Declaring a variable to hold the received message and using an integer timeout (e.g., 28 seconds): DECLARE v_msg VARCHAR2(4000); BEGIN DBMS_PIPE.RECEIVE_MESSAGE(pipename => 'CCC', message => v_msg, timeout => 28); DBMS_OUTPUT.PUT_LINE('Received: ' || v_msg); END; /
If you don’t want to use named notation: DECLARE v_msg VARCHAR2(4000); BEGIN DBMS_PIPE.RECEIVE_MESSAGE('CCC', v_msg, 28); END; /
Notes:
- Ensure the pipe named CCC exists (CREATE_PIPE) and that a sender is putting messages into it (SEND_MESSAGE) for RECEIVE_MESSAGE to return something before the timeout.
- The timeout must be an integer number of seconds. A decimal like 28.39 is not valid for the timeout parameter and would cause an error or implicit conversion issue.