⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 create_messenger.sql

📁 介绍Oracle PL SQL编程
💻 SQL
字号:
/* * create_messenger.sql * Chapter 11, Oracle10g PL/SQL Programming * by Ron Hardman, Michael McLaughlin and Scott Urman * * This script sends builds a package to send and receive * messages between users. * * It has a dependencies on message pipes adhering to a * standard naming convention. Please ensure you have * run create_pipe3.sql in any user schemas that will * participate in your test. Alternatively, please have * the script in the same directory where it can be  * called by this script. */SET ECHO ONSET SERVEROUTPUT ON SIZE 1000000-- Call script to build local pipes.@create_pipe3.sql-- Create package specification.CREATE OR REPLACE PACKAGE messenger IS  -- Define function specification.  FUNCTION send_message    (user_name      VARCHAR2    ,message        VARCHAR2    ,message_box    VARCHAR2 DEFAULT 'MESSAGE_INBOX')    RETURN INTEGER;  -- Define function specification.  FUNCTION receive_message    RETURN VARCHAR2;END messenger;/-- Show any errors while building specification.show errors-- Create package body.CREATE OR REPLACE PACKAGE BODY messenger IS  -- Define local package function to return user name.  FUNCTION get_user     RETURN VARCHAR2 IS  BEGIN    -- Use a cursor for-loop to get user name.    FOR i IN (SELECT user FROM dual) LOOP      -- Return the user.      return i.user;    END LOOP;   END get_user;    -- Implement package function defined in specification.  FUNCTION send_message    (user_name      VARCHAR2    ,message        VARCHAR2    ,message_box    VARCHAR2 DEFAULT 'MESSAGE_INBOX')    RETURN INTEGER IS    -- Define variable for target mailbox.    message_pipe    VARCHAR2(100 CHAR);  BEGIN    -- Purge local pipe content.    DBMS_PIPE.RESET_BUFFER;    -- Declare the target outbox for a message.    message_pipe := UPPER(user_name) || '$'                 || UPPER(message_box);    -- Use the procedure to put a message in the local buffer.     DBMS_PIPE.PACK_MESSAGE(message);    -- Send message, success is a zero return value.    IF (DBMS_PIPE.send_message(message_pipe) = 0) THEN      -- Message sent, so return 0.      RETURN 0;    ELSE      -- Message not sent, so return 1.      RETURN 1;    END IF;   END send_message;    -- Implement package function defined in specification.  FUNCTION receive_message    RETURN VARCHAR2 IS    -- Define variable for target mailbox.    message         VARCHAR2(4000 CHAR) :=  NULL;    message_box     VARCHAR2(100 CHAR);    inbox           VARCHAR2(14 CHAR) := 'MESSAGE_INBOX';    timeout         INTEGER := 0;    return_code     INTEGER;  BEGIN    -- Purge local pipe content.    DBMS_PIPE.RESET_BUFFER;    -- Declare the target outbox for a message.    message_box := get_user || '$' || inbox;    -- Use the procedure to put a message in the local buffer.     return_code := DBMS_PIPE.receive_message(message_box,timeout);    -- Evaluate and process return code.    CASE return_code      WHEN 0 THEN         -- Read the message into a variable.        DBMS_PIPE.UNPACK_MESSAGE(message);      WHEN 1 THEN      -- Assign message.      message := 'The message pipe is empty.';      WHEN 2 THEN       -- Assign message.      message := 'The message is too large for variable.';      WHEN 3 THEN       -- Assign message.      message := 'An interrupt occurred, contact the DBA.';    END CASE;    -- Return the message.    RETURN message;  END receive_message;END messenger;/-- Show any errors while building specification.show errors

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -