Short answer: the snippet as written is invalid.
What it does (or tries to do)
- CHR(99)||CHR(99)||CHR(99) evaluates to 'ccc'.
- DBMS_PIPE.RECEIVE_MESSAGE expects the first parameter to be an OUT variable that will receive the message, not a literal value.
- You also must open a pipe first with DBMS_PIPE.OPEN_PIPE('PIPE_NAME').
So DBMS_PIPE.RECEIVE_MESSAGE('ccc', 15) would not compile because you’re trying to pass a literal to an OUT parameter.
How it should be used
- Open a pipe first, then receive into a variable: DECLARE l_msg VARCHAR2(32767); BEGIN DBMS_PIPE.OPEN_PIPE('my_pipe'); -- choose the pipe name DBMS_PIPE.RECEIVE_MESSAGE(l_msg, 15); -- receive into the variable with a 15s timeout DBMS_OUTPUT.PUT_LINE('Received: ' || l_msg); END;
If you intended the pipe name itself to be 'ccc', you would still write OPEN_PIPE('ccc') and then RECEIVE into a variable, not pass a literal to RECEIVE_MESSAGE.
