DBA Data[Home] [Help]

PACKAGE BODY: APPS.XDP_ADAPTER_CORE_PIPE

Source


1 PACKAGE BODY XDP_ADAPTER_CORE_PIPE AS
2 /* $Header: XDPACOPB.pls 120.2 2005/07/07 02:23:52 appldev ship $ */
3 
4 
5  pv_ChannelTruncLength number := 4;
6  pv_ChannelLength number := 30;
7 
8 Procedure CleanupPipe(p_ChannelName in varchar2,
9 		      p_CleanReturn in varchar2 default 'Y')
10 is
11 begin
12 
13  DBMS_PIPE.PURGE(p_ChannelName);
14  if p_CleanReturn = 'Y' then
15 	DBMS_PIPE.PURGE(GetReturnChannelName(p_ChannelName => CleanupPipe.p_ChannelName));
16  end if;
17 
18 end CleanupPipe;
19 
20 Procedure SendPipedMessage(p_ChannelName in varchar2,
21 			    p_Message in varchar2)
22 is
23  ReturnCode number := 0;
24 begin
25 
26      -- dbms_output.put_line(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS'));
27      -- dbms_output.put_line('Sending ' || p_Message || ' on ' || p_ChannelName);
28      DBMS_PIPE.PACK_MESSAGE(SendPipedMessage.p_Message);
29      DBMS_PIPE.PACK_MESSAGE(SendPipedMessage.p_ChannelName);
30      ReturnCode := DBMS_PIPE.SEND_MESSAGE
31 			(SendPipedMessage.p_ChannelName, pv_AckTimeout);
32 
33      -- dbms_output.put_line('After Sending... Return Code: ' || ReturnCode);
34 end SendPipedMessage;
35 
36 
37 Procedure ReceivePipedMessage(	p_ChannelName in varchar2,
38 				p_Timeout in number,
39 				p_ErrorCode OUT NOCOPY number,
40 				p_Message OUT NOCOPY varchar2)
41 is
42  ActualTimeout number;
43 begin
44 
45 	if p_Timeout is null then
46 		ActualTimeout := pv_AckTimeout;
47 	else
48 		ActualTimeout := p_Timeout;
49 	end if;
50 
51 
52 	-- dbms_output.put_line(to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS'));
53 	-- dbms_output.put_line('DBMS_PIPE.RECEIVE. Channel: ' || p_ChannelName || ' Timeout: ' || ActualTimeout);
54 	p_ErrorCode := DBMS_PIPE.RECEIVE_MESSAGE
55 			(ReceivePipedMessage.p_ChannelName, ActualTimeout);
56 
57 --	dbms_output.put_line('After read..: ' || to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS'));
58 	-- dbms_output.put_line('Error Code: ' || p_ErrorCode);
59 	if p_ErrorCode = 0  then
60 		if DBMS_PIPE.NEXT_ITEM_TYPE <> 0  then
61 			-- dbms_output.put_line('Unpacking...');
62 			DBMS_PIPE.UNPACK_MESSAGE(p_Message);
63 			-- dbms_output.put_line('AFTER Unpacking...' || substr(p_Message,1,200));
64 		else
65 			p_Message := null;
66 		end if;
67 	end if;
68 
69 -- exception
70 -- when others then
71 -- dbms_output.put_line('PIPE EXCEPTION: ' || SQLCODE);
72 -- dbms_output.put_line('PIPE EXCEPTION: ' || substr(sqlerrm,1,200));
73 -- dbms_output.put_line('PIPE EXCEPTION: ' || substr(sqlerrm,201,200));
74 end ReceivePipedMessage;
75 
76 
77 Function GetReturnChannelName(p_ChannelName in varchar2) return varchar2
78 is
79  ReturnChannelName varchar2(40);
80 begin
81 
82 	ReturnChannelName := GetReturnChannelName.p_ChannelName || '_R';
83 
84 	return (ReturnChannelName);
85 
86 end GetReturnChannelName;
87 
88 
89 function ConstructChannelName (p_ChannelType in varchar2,
90 				 p_ChannelName in varchar2) return varchar2
91 is
92 
93 begin
94 
95  if p_ChannelType = 'CONTROL' then
96 	return ( p_ChannelName || '_C');
97  elsif p_ChannelType = 'APPL' then
98 	return ( p_ChannelName || '_A');
99  else
100 	return (p_ChannelName);
101  end if;
102 
103 end ConstructChannelName;
104 
105 
106 function GetUniqueChannelName (p_Name in varchar2) return varchar2
107 is
108  l_ChannelName   varchar2(30);
109  l_Temp        varchar2(80);
110  l_Seq         number;
111  l_SeqLen     number;
112  l_TruncLen   number;
113 begin
114   l_temp := RTRIM(p_Name,' ');
115   l_temp := LTRIM(l_temp);
116 
117 
118   l_temp := REPLACE(l_Temp, ' ', '_');
119 
120    SELECT XDP_CHANNEL_S.NEXTVAL into l_Seq
121    FROM dual;
122 
123    l_ChannelName := to_char(l_Seq);
124 
125    l_SeqLen := LENGTH(l_ChannelName);
126 
127    l_TruncLen := pv_ChannelLength - (l_SeqLen + pv_ChannelTruncLength);
128 
129    l_ChannelName := SUBSTR(l_Temp, 1, l_TruncLen) || '_' || l_ChannelName;
130 
131  RETURN l_ChannelName;
132 
133 end GetUniqueChannelName;
134 
135 begin
136 
137  pv_AckTimeout := XDP_ADAPTER_CORE_DB.GetAckTimeOut;
138 
139 end XDP_ADAPTER_CORE_PIPE;