[Home] [Help]
PACKAGE BODY: APPS.HR_BUILD_NAME_TRG_PKG
Source
1 PACKAGE BODY HR_BUILD_NAME_TRG_PKG as
2 /* $Header: peppftrg.pkb 115.7 2004/01/08 00:03:52 njaladi ship $ */
3 PROCEDURE build_trigger IS
4 sql_proc_cursor INTEGER;
5 sql_proc_rows INTEGER;
6 sql_str VARCHAR2(32000);
7 l_full_name VARCHAR2(30);
8 l_order_name VARCHAR2(30);
9 l_lgsl_code VARCHAR2(2);
10 l_lgsl_cd VARCHAR2(2);
11 l_pkb_name VARCHAR2(13);
12 l_param VARCHAR2(4000); -- list of parameters for per_xx_full_name/per_xx_order_name
13 l_text_str VARCHAR2(2100);
14 l_text_inp VARCHAR2(2100);
15 l_pos INTEGER := 0;
16
17 -- Start of fix for Bug #2459815
18 -- cursor instl_prod selects all the installed Legislations
19 CURSOR instl_prod IS
20 SELECT legislation_code
21 FROM hr_legislation_installations
22 WHERE application_short_name = 'PER'
23 AND ( (status='I' OR action IS NOT NULL)
24 or (legislation_code = 'JP') -- Added for fix of #3290184
25 )
26 ORDER BY legislation_code;
27
28 -- cursor lgsl_pkb delivers all package body names created by localization team
29 CURSOR lgsl_pkb(p_lgsl_cd VARCHAR2) IS
30 SELECT object_name
31 FROM user_objects
32 WHERE object_type='PACKAGE BODY'
33 AND object_name LIKE 'HR_'||(p_lgsl_cd)||'_UTILITY'
34 AND length(object_name)=13
35 ORDER BY object_name;
36 -- End of Fix for Bug #2459815
37
38 -- cursor text_line returns all source code lines of the package body
39 CURSOR text_line(p_pkb_name VARCHAR2) IS
40 SELECT text
41 FROM user_source
42 WHERE name = p_pkb_name
43 and type = 'PACKAGE' --Bug# 2858437
44 ORDER BY line;
45 BEGIN
46 -- l_param variable contains a list of parameters for per_xx_full_name/
47 -- per_xx_order_name call
48 l_param := ':new.first_name,';
49 l_param := l_param || ':new.middle_names,';
50 l_param := l_param || ':new.last_name,';
51 l_param := l_param || ':new.known_as,';
52 l_param := l_param || ':new.title,';
53 l_param := l_param || ':new.suffix,';
54 l_param := l_param || ':new.pre_name_adjunct,';
55 l_param := l_param || ':new.per_information1,';
56 l_param := l_param || ':new.per_information2,';
57 l_param := l_param || ':new.per_information3,';
58 l_param := l_param || ':new.per_information4,';
59 l_param := l_param || ':new.per_information5,';
60 l_param := l_param || ':new.per_information6,';
61 l_param := l_param || ':new.per_information7,';
62 l_param := l_param || ':new.per_information8,';
63 l_param := l_param || ':new.per_information9,';
64 l_param := l_param || ':new.per_information10,';
65 l_param := l_param || ':new.per_information11,';
66 l_param := l_param || ':new.per_information12,';
67 l_param := l_param || ':new.per_information13,';
68 l_param := l_param || ':new.per_information14,';
69 l_param := l_param || ':new.per_information15,';
70 l_param := l_param || ':new.per_information16,';
71 l_param := l_param || ':new.per_information17,';
72 l_param := l_param || ':new.per_information18,';
73 l_param := l_param || ':new.per_information19,';
74 l_param := l_param || ':new.per_information20,';
75 l_param := l_param || ':new.per_information21,';
76 l_param := l_param || ':new.per_information22,';
77 l_param := l_param || ':new.per_information23,';
78 l_param := l_param || ':new.per_information24,';
79 l_param := l_param || ':new.per_information25,';
80 l_param := l_param || ':new.per_information26,';
81 l_param := l_param || ':new.per_information27,';
82 l_param := l_param || ':new.per_information28,';
83 l_param := l_param || ':new.per_information29,';
84 l_param := l_param || ':new.per_information30';
85 -- constant part of sql_str that starts source code for the trigger PER_ALL_PEOPLE_F_NAME
86 sql_str := 'CREATE OR REPLACE TRIGGER PER_ALL_PEOPLE_F_NAME ' ||
87 'BEFORE INSERT OR UPDATE ON PER_ALL_PEOPLE_F FOR EACH ROW ' ||
88 'DECLARE l_legislation_code VARCHAR2(2); BEGIN ' ||
89 'if hr_general.g_data_migrator_mode <> ''Y'' then ' ||
90 'l_legislation_code := HR_API.' ||
91 'return_legislation_code(:new.business_group_id);';
92
93 -- Start of fix for Bug #2459815
94 OPEN instl_prod;
95 LOOP
96 FETCH instl_prod INTO l_lgsl_cd;
97 IF instl_prod%NOTFOUND THEN
98 CLOSE instl_prod;
99 EXIT;
100 END IF;
101
102 OPEN lgsl_pkb(l_lgsl_cd);
103 -- End of fix for Bug #2459815
104 LOOP
105 FETCH lgsl_pkb INTO l_pkb_name;
106 IF lgsl_pkb%NOTFOUND THEN
107 CLOSE lgsl_pkb;
108 EXIT;
109 ELSE
110 -- package body HR_XX_UTILITY found
111 l_lgsl_code := SUBSTR(l_pkb_name,4,2);
112 l_full_name := 'per_' || LOWER(l_lgsl_code) || '_full_name';
113 l_order_name := 'per_' || LOWER(l_lgsl_code) || '_order_name';
114 -- check if legislation code of the current row is the same as
115 -- in the package body name HR_XX_UTILITY created by
116 -- localization team
117 sql_str := sql_str || 'IF l_legislation_code = ' ||
118 '''' || UPPER(l_lgsl_code) || '''' || ' THEN ';
119 -- get all text lines of the package body HR_XX_UTILITY
120 OPEN text_line(l_pkb_name);
121 LOOP
122 FETCH text_line INTO l_text_inp;
123 IF text_line%NOTFOUND THEN
124 CLOSE text_line;
125 EXIT;
126 ELSE
127 -- check if the current text line has per_xx_full_name call
128 l_text_str := LOWER(l_text_inp);
129 l_pos := 0;
130 l_pos := INSTR(l_text_str,l_full_name);
131 IF l_pos>0 THEN
132 -- build per_xx_full_name function call in trigger body
133 sql_str := sql_str || ':new.full_name := ' || l_pkb_name ||
134 '.' || l_full_name || '(';
135 sql_str := sql_str || l_param || ');';
136 END IF;
137 -- check if the current text line has per_xx_order_name call
138 l_pos := 0;
139 l_pos := INSTR(l_text_str,l_order_name);
140 IF l_pos>0 THEN
141 -- build per_xx_order_name function call in trigger body
142 sql_str := sql_str || ':new.order_name := ' || l_pkb_name ||
143 '.' || l_order_name || '(';
144 sql_str := sql_str || l_param || ');';
145 END IF;
146 END IF;
147 END LOOP;
148 sql_str := sql_str || 'NULL;END IF;';
149 END IF;
150 END LOOP;
151 END LOOP; -- instl_prod
152 sql_str := sql_str || 'NULL;END IF;END;';
153 -- Dynamic SQL processing of sql_str
154 sql_proc_cursor := dbms_sql.open_cursor;
155 dbms_sql.parse(sql_proc_cursor,sql_str,dbms_sql.v7);
156 sql_proc_rows := dbms_sql.execute(sql_proc_cursor);
157 IF dbms_sql.is_open(sql_proc_cursor) THEN
158 dbms_sql.close_cursor(sql_proc_cursor);
159 END IF;
160 END;
161 END HR_BUILD_NAME_TRG_PKG;