Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3619952
А
Аноним
17 июня 2026 22:48 · публичный вопрос
А
Аноним

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

Нейросеть17 июня 2026 22:48

Short answer: it’s an Oracle DBMS_PIPE RECEIVE_MESSAGE call, but as written it won’t compile.

What it does (in general)

  • DBMS_PIPE.RECEIVE_MESSAGE waits for a message on a named pipe and copies the message into the first parameter, up to a timeout.
  • The second parameter (15) is the timeout in seconds.
  • CHR(99) is the ASCII code for 'c', so CHR(99)||CHR(99)||CHR(99) equals 'ccc'. But you cannot pass a string literal to an OUT parameter.

Why the code as shown is problematic

  • RECEIVE_MESSAGE expects its first argument to be a variable (an OUT IN OUT parameter). You can’t pass a literal like 'ccc' there. The code will raise a compilation error.

A correct usage example

  • Declare a variable to receive the message, then call the procedure.

DECLARE v_msg VARCHAR2(32767); BEGIN DBMS_PIPE.RECEIVE_MESSAGE(p_message => v_msg, p_timeout => 15); IF v_msg IS NULL THEN DBMS_OUTPUT.PUT_LINE('No message received within timeout.'); ELSE DBMS_OUTPUT.PUT_LINE('Received: ' || v_msg); END IF; END;

Notes

  • If a message was sent on the pipe (e.g., via DBMS_PIPE.SEND_MESSAGE), v_msg will contain that message after the call; otherwise it will be NULL.
  • 15 means wait up to 15 seconds for a message.
  • CHR(99)||CHR(99)||CHR(99) equals 'ccc'; if your intent was to check for a specific message, you’d still need to receive into a variable and then compare it, e.g., IF v_msg = 'ccc' THEN ...

Optional reminder

  • DBMS_PIPE is old/legacy in newer Oracle versions; for new designs consider Advanced Queuing (DBMS_AQ) or other messaging mechanisms.
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
Short answer: it’s an Oracle DBMS_PIPE RECEIVE_MESSAGE call, but as written it won’t compile. What it does (in general) - DBMS_PIPE.RECEIVE_MESSAGE waits for a message on a named pipe and copies the message into the first parameter, up to a timeout. - The second parameter (15) is the timeout in seconds. - CHR(99) is the ASCII code for 'c', so CHR(99)||CHR(99)||CHR(99) equals 'ccc'. But you cannot pass a string literal to an OUT parameter. Why the code as shown is problematic - RECEIVE_MESSAGE expects its first argument to be a variable (an OUT IN OUT parameter). You can’t pass a literal like 'ccc' there. The code will raise a compilation error. A correct usage example - Declare a variable to receive the message, then call the procedure. DECLARE v_msg VARCHAR2(32767); BEGIN DBMS_PIPE.RECEIVE_MESSAGE(p_message => v_msg, p_timeout => 15); IF v_msg IS NULL THEN DBMS_OUTPUT.PUT_LINE('No message received within timeout.'); ELSE DBMS_OUTPUT.PUT_LINE('Received: ' || v_msg); END IF; END; Notes - If a message was sent on the pipe (e.g., via DBMS_PIPE.SEND_MESSAGE), v_msg will contain that message after the call; otherwise it will be NULL. - 15 means wait up to 15 seconds for a message. - CHR(99)||CHR(99)||CHR(99) equals 'ccc'; if your intent was to check for a specific message, you’d still need to receive into a variable and then compare it, e.g., IF v_msg = 'ccc' THEN ... Optional reminder - DBMS_PIPE is old/legacy in newer Oracle versions; for new designs consider Advanced Queuing (DBMS_AQ) or other messaging mechanisms.