Здравствуйте. Есть вопрос по коду диаграммы ганта.
Есть таблица задачи, есть shared component для выпадающего списка заданий.
Код PL/SQL dynamic content:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
declare
c integer := 0;
d date;
d2 date;
ed date;
d_count pls_integer := 0;
x integer;
l_start_cell number;
l_col_span number;
l_left_cells integer;
l_ms varchar2(4000);
l_proj number;
l_complete_id number := null;
l_weeks number := 22;
l_months number;
l_color varchar2(30) := null;
l_title varchar2(4000);
l_first_month varchar2(100);
l_last_month varchar2(100);
l_month_span integer;
l_month_weeks integer;
begin
-- compute start date
d := trunc(sysdate);
ed := d + (30 * l_weeks);
-- print headers
l_month_span := 0;
l_month_weeks := 0;
l_last_month := trim(to_char(d+30,'Month'));
sys.htp.prn('<table cellspacing="0" cellpadding="0" class="timelineTable">');
sys.htp.prn('<thead><tr>');
sys.htp.prn('<th></th>');
for i in 1..l_weeks loop
d2 := d + ((i - 1)*30);
l_first_month := trim(to_char(d2+30,'Month'));
if l_first_month != l_last_month then
htp.prn('<th class="monthLabel" colspan="'||l_month_span||'">'||l_last_month||'</th>');
l_month_weeks := l_month_weeks + l_month_span;
l_month_span := 0;
end if;
l_month_span := l_month_span + 1;
l_last_month := l_first_month;
end loop;
if l_month_weeks < l_weeks then
d2 := d + (30 * l_weeks) + 30;
htp.prn('<th class="monthLabel" colspan="'||to_char(l_weeks - l_month_weeks)||'">'||
to_char(d2,'Month')||'</th>');
end if;
sys.htp.prn('</tr>');
sys.htp.prn('<tr>');
sys.htp.prn('<th></th>');
for i in 1..l_weeks loop
d2 := d + ((i - 1)*30);
sys.htp.prn('<th class="weekLabel">'||to_char(d2,'DD')||'-'||to_char(d2+30,'DD')||'</th>');
end loop;
sys.htp.prn('</tr></thead><tbody class="hideMe">');
-- print row
for c1 in (
select distinct zadid milestone_name
from podzadachi
where (nvl(:P38_NEW,'0') = '0' or zadid = :P38_NEW)
order by 1) loop
c := 0;
for c2 in (
select
podzadid,
zadid,
podzadname milestone_name,
statuszad milestone_status,
rukid milestone_owner,
dnpodzad MILESTONE_START_DATE,
dopodzad MILESTONE_DATE,
to_char(dopodzad,'Month') the_month,
to_char(dopodzad,'YYYY') the_year,
to_char(dopodzad,'DD') the_day
from podzadachi
where zadid = c1.milestone_name
order by dopodzad
) loop
c := c + 1;
if c = 1 then
-- sys.htp.prn('<tr>');
if length(c1.milestone_name) > 50 then
l_proj := substr(c1.milestone_name,1,50)||'...';
else
l_proj := c1.milestone_name;
end if;
sys.htp.prn('</tbody><tbody><tr><th><a href="#">'||
sys.htf.escape_sc(l_proj)||'</a></th>');
else
sys.htp.p('<tr><th></th>');
end if;
-- compute starting cell
if c2.MILESTONE_START_DATE <= d then
l_start_cell := 1;
else
l_start_cell := (c2.MILESTONE_START_DATE - d) / 7;
end if;
l_start_cell := ceil(l_start_cell);
-- before milestone
if l_start_cell > 1 then
l_left_cells := l_start_cell - 1;
for j in 1..l_left_cells loop
sys.htp.prn('<td></td>');
end loop;
else
l_left_cells := 0;
end if;
-- complete milestone length
if (c2.MILESTONE_DATE - greatest(c2.MILESTONE_START_DATE,d)) < 7 then
l_col_span := 1;
else
l_col_span := (c2.MILESTONE_DATE - greatest(c2.MILESTONE_START_DATE,d)) / 7;
end if;
l_col_span := ceil(l_col_span);
l_ms := substr(c2.milestone_name,1,greatest((l_col_span * 15),22));
if length(l_ms) < length(c2.milestone_name) then
l_ms := l_ms ||'...';
end if;
-- color
if upper(nvl(c2.milestone_status,'Open')) = 50 then
l_color := 'completedMilestone';
elsif upper(nvl(c2.milestone_status,'Open')) = 75 and c2.MILESTONE_DATE >= trunc(sysdate) then
l_color := '';
elsif upper(nvl(c2.milestone_status,'Open')) = 100 and c2.MILESTONE_DATE < trunc(sysdate) then
l_color := 'lateMilestone';
else
l_color := 'brown';
end if;
l_title := trim(to_char(c2.MILESTONE_START_DATE,'DD Month')) ||' - '||
trim(to_char(c2.MILESTONE_DATE,'DD Month'));
if c2.milestone_owner is not null then
l_title := l_title||' - '||sys.htf.escape_sc(c2.milestone_owner);
end if;
sys.htp.prn('<td colspan="'||l_col_span||'">');
sys.htp.prn('<a href="#" class="'||l_color||'">');
sys.htp.prn(sys.htf.escape_sc(l_ms)||'</a></td>');
-- fill to right
x := l_weeks - (l_left_cells + l_col_span);
if x > 0 then
for j in 1..x loop
sys.htp.p('<td></td>');
end loop;
end if;
sys.htp.prn('</tr>');
end loop; -- inner loop
sys.htp.prn('</tbody>');
end loop; -- outer loop
-- class values are green red blue brown
-- close table
sys.htp.prn('</table>');
end;
после запуска выходит ошибка:
"Error during rendering of region "DGantt".
ORA-06502: PL/SQL: numeric or value error: character to number conversion error"
Можете подсказать, где был допущен промах?
Заранее спасибо.