- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
procedure dynamic_open(p_sql VARCHAR2, p_params t_string_table, p_cur OUT SYS_REFCURSOR) is
begin
case p_params.count
when 0 then open p_cur for p_sql;
when 1 then open p_cur for p_sql using p_params(1);
when 2 then open p_cur for p_sql using p_params(1),
p_params(2);
when 3 then open p_cur for p_sql using p_params(1),
p_params(2),
p_params(3);
when 4 then open p_cur for p_sql using p_params(1),
p_params(2),
p_params(3),
p_params(4);
/* ... */
when 100 then open p_cur for p_sql using p_params(1),
p_params(2),
p_params(3),
p_params(4),
/* ... */
p_params(100);
end case;
end dynamic_open;
Динамический SQL - такой динамический. Уложились всего-то в 5050 строк.
user654321 31.08.2010 18:59 # 0
wecanstoptrain 31.08.2010 20:21 # +1
Oleg_quadro 01.09.2010 10:16 # +1
wecanstoptrain 01.09.2010 10:25 # +1
Podmotal 20.09.2010 18:04 # +1
Это позволяет при любых входящих условиях выполнять execute immediate ... using ... или open for ... using ... с неизменным числом параметров.
Oleg_quadro 01.09.2010 10:15 # −3
Oleg_quadro 02.09.2010 16:54 # −5
Oleg_quadro 15.10.2010 16:31 # −2
Oleg_quadro 19.10.2010 19:12 # 0
Анонимус 31.08.2010 22:39 # 0
Oleg_quadro 01.09.2010 10:14 # 0
japan007 20.11.2010 04:06 # 0