DBA Data[Home] [Help]

PACKAGE BODY: APPS.QLTSMENB

Source


1 PACKAGE BODY QLTSMENB as
2 /* $Header: qltsmenb.plb 115.7 2002/11/27 19:30:12 jezheng ship $ */
3 
4 -- 8/2/95 - CREATED
5 -- Kevin Wiggen
6 
7 --  This package does the join to other tables for qa results
8 --  It needs the char_id and value from results, and it will perform the lookup
9 --  It is not necessary to check if there is a lookup first, but its suggested
10 
11   FUNCTION LOOKUP(x_char_id IN NUMBER,
12 	          x_value   IN VARCHAR2)
13      RETURN VARCHAR2	IS
14 
15    return_value_char  VARCHAR2(1500);
16    return_value_num   NUMBER;
17    return_value_date  DATE;
18 
19    used_where BOOLEAN := FALSE;
20    V_DATATYPE NUMBER;
21    V_FK_LOOKUP_TYPE NUMBER;
22    V_FK_TABLE_NAME VARCHAR2(30);
23    V_FK_TABLE_SHORT_NAME VARCHAR2(5);
24    V_PK_ID VARCHAR2(30);
25    V_PK_ID2 VARCHAR2(30);
26    V_PK_ID3 VARCHAR2(30);
27    V_FK_ID VARCHAR2(30);
28    V_FK_ID2 VARCHAR2(30);
29    V_FK_ID3 VARCHAR2(30);
30    V_FK_MEANING VARCHAR2(30);
31    V_FK_ADD_WHERE VARCHAR2(2000);
32 
33    source_cursor integer;
34    ignore integer;
35 
36    V_CATEGORY_SET_ID VARCHAR2(1000);
37 
38    v_sql_statement VARCHAR2(20000) := null;
39 
40    cursor info is
41 	select DATATYPE, FK_LOOKUP_TYPE, FK_TABLE_NAME, FK_TABLE_SHORT_NAME,
42                PK_ID, PK_ID2, PK_ID3, FK_ID, FK_ID2, FK_ID3, FK_MEANING,
43 	       FK_ADD_WHERE
44         from   qa_chars
45         where  char_id = x_char_id;
46 
47   BEGIN
48     IF x_value IS NULL THEN
49       RETURN(x_value);
50     END IF;
51 
52     open info;
53     fetch info into V_DATATYPE, V_FK_LOOKUP_TYPE, V_FK_TABLE_NAME,
54 		    V_FK_TABLE_SHORT_NAME, V_PK_ID, V_PK_ID2, V_PK_ID3,
55 		    V_FK_ID, V_FK_ID2, V_FK_ID3, V_FK_MEANING, V_FK_ADD_WHERE;
56 
57     close info;
58 
59     if (V_FK_LOOKUP_TYPE is null) or (V_FK_LOOKUP_TYPE = 2) then
60 	-- no lookup return original value
61    	RETURN(x_value);
62 /*
63     elsif x_char_id = 33 then			-- sales order number
64         --
65 	-- Need special processing for sales order number for now because
66 	-- its data reside on two tables instead of one.  Will try to fix
67 	-- this in the future.
68 	-- bso Mon May 31 19:42:28 PDT 1999
69 	--
70 	v_sql_statement :=
71         'select order_number from (' ||
72 	   'select to_number(segment1) order_number from mtl_sales_orders ' ||
73 	   'where sales_order_id=' || x_value || ' union all '||
74 	   'select order_number from oe_order_headers '||
75 	   'where header_id=' || x_value || ')' ||
76         'where rownum = 1';
77 */
78     else
79 	v_sql_statement := 'SELECT ' || V_FK_TABLE_SHORT_NAME || '.' ||
80                             V_FK_MEANING || ' FROM  ' ||
81 			    V_FK_TABLE_NAME || ' ' || V_FK_TABLE_SHORT_NAME ||
82 			    ' WHERE ' || x_value || ' = ' ||
83 			    V_FK_TABLE_SHORT_NAME || '.' || V_PK_ID;
84 
85         if V_PK_ID2 is not null then
86 	   v_sql_statement := v_sql_statement || ' and ' || QLTNINRB.NAME_IN(V_FK_ID2) ||
87  			      ' = ' || V_FK_TABLE_SHORT_NAME || '.' || V_PK_ID2;
88            if V_PK_ID3 is not null then
89            v_sql_statement := v_sql_statement || ' and ' || QLTNINRB.NAME_IN(V_FK_ID3) ||
90                               ' = ' || V_FK_TABLE_SHORT_NAME || '.' || V_PK_ID3;
91            end if;
92         end if;
93         if V_FK_ADD_WHERE is not null then
94 	   v_sql_statement := v_sql_statement || ' and ' || V_FK_ADD_WHERE;
95         end if;
96 
97         -- check for type 3s
98 	if (V_FK_LOOKUP_TYPE = 3) then
99         -- This must be a Item Category, its our only three right now
100         -- simply need to add a where clause that includes the cat_set_id profile
101            V_CATEGORY_SET_ID := FND_PROFILE.VALUE('QA_CATEGORY_SET');
102             -- check to see if the profile is set
103            if V_CATEGORY_SET_ID is null then
104 	      FND_MESSAGE.SET_NAME('QA','QA_PROFILE_NOT_SET');
105 	      QLTSTORB.KILL_REC_GROUP;
106 	      APP_EXCEPTION.RAISE_EXCEPTION;
107            end if;
108            -- add the category Set
109            v_sql_statement := v_sql_statement || ' CATEGORY_SET_ID = ' ||
110 			      V_CATEGORY_SET_ID || ' AND ';
111         end if;
112     end if;
113 
114     -- run the statement
115     source_cursor := dbms_sql.open_cursor;
116     dbms_sql.parse(source_cursor, v_sql_statement, dbms_sql.v7);
117     if V_DATATYPE = 1 then
118        dbms_sql.define_column(source_cursor, 1, return_value_char, 1500);
119     elsif V_DATATYPE = 2 then
120        dbms_sql.define_column(source_cursor, 1, return_value_num);
121     else
122        dbms_sql.define_column(source_cursor, 1, return_value_date);
123     end if;
124     ignore := dbms_sql.execute(source_cursor);
125 
126     -- now get the value and return it
127 
128     -- For Bug2243760. Added Close_cursor statement in
129     -- below three cases.
130 
131     if dbms_sql.fetch_rows(source_cursor)>0 then
132        if V_DATATYPE = 1 then
133 	  dbms_sql.column_value(source_cursor,1, return_value_char);
134 	  dbms_sql.close_cursor(source_cursor);
135 	  RETURN(return_value_char);
136        elsif V_DATATYPE = 2 then
137 	  dbms_sql.column_value(source_cursor,1, return_value_num);
138 	  dbms_sql.close_cursor(source_cursor);
139 	  RETURN(to_char(return_value_num));
140        else
141 	  dbms_sql.column_value(source_cursor,1, return_value_date);
142 	  dbms_sql.close_cursor(source_cursor);
143 	  RETURN(to_char(return_value_date));
144        end if;
145     end if;
146 
147 END LOOKUP;
148 
149 END QLTSMENB;
150