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
|
FUNCTION FILLCOMBO(PC_combobox VARCHAR2,
PC_colonne VARCHAR2,
LC_table VARCHAR2,
PC_msg_defaut VARCHAR2 DEFAULT NULL,
PC_clause_where VARCHAR2 DEFAULT NULL,
PC_val_where VARCHAR2 DEFAULT NULL,
PC_clause_and VARCHAR2 DEFAULT NULL,
PC_val_and VARCHAR2 DEFAULT NULL) return boolean is
LConn_conn_id EXEC_SQL.CONNTYPE;
LCu_lecture EXEC_SQL.CURSTYPE;
LC_sql_stmt VARCHAR2(500);
LI_nIgn PLS_INTEGER;
LC_val_lue VARCHAR2(50);
LN_indice NUMBER(4) := 1;
LC_item_list ITEM := FIND_ITEM(PC_combobox);
ln_tmp number(12);
lc_bidon varchar2(255);
BEGIN
CLEAR_LIST(LC_item_list);
lc_bidon := get_block_property( name_in('system.current_block'), STATUS);
abort_query;
ln_tmp := get_list_element_count(LC_item_list);
while ln_tmp > 0 loop
delete_list_element(LC_item_list,1);
ln_tmp := get_list_element_count(LC_item_list);
end loop;
LConn_conn_id := EXEC_SQL.DEFAULT_CONNECTION;
LCu_lecture := EXEC_SQL.OPEN_CURSOR(LConn_conn_id);
LC_sql_stmt := ' SELECT DISTINCT ' || PC_colonne ||
' FROM ' || LC_table;
IF PC_clause_where IS NOT NULL THEN
LC_sql_stmt := LC_sql_stmt || PC_clause_where || ' = ' || ADD_QUOTE_STRING(PC_val_where);
END IF;
IF PC_clause_and IS NOT NULL THEN
LC_sql_stmt := LC_sql_stmt || PC_clause_and || ' = ' || ADD_QUOTE_STRING(PC_val_and);
END IF;
LC_sql_stmt := LC_sql_stmt || ' ORDER BY ' || PC_colonne || ' ASC';
EXEC_SQL.PARSE(LConn_conn_id, LCu_lecture, LC_sql_stmt);
EXEC_SQL.DEFINE_COLUMN(LConn_conn_id, LCu_lecture, 1, LC_val_lue, 50);
IF PC_msg_defaut IS NOT NULL THEN
ADD_LIST_ELEMENT(LC_item_list, LN_indice, LC_val_lue, LC_val_lue);
LN_indice := LN_indice + 1;
END IF;
LI_nIgn := EXEC_SQL.EXECUTE(LConn_conn_id, LCu_lecture);
WHILE ( EXEC_SQL.FETCH_ROWS(LConn_conn_id, LCu_lecture) > 0 ) LOOP
EXEC_SQL.COLUMN_VALUE(LConn_conn_id, LCu_lecture, 1, LC_val_lue);
ADD_LIST_ELEMENT(LC_item_list, LN_indice, LC_val_lue, LC_val_lue);
LN_indice := LN_indice + 1;
END LOOP;
EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_lecture);
EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
RETURN TRUE;
EXCEPTION WHEN EXEC_SQL.PACKAGE_ERROR THEN
-- même si une erreur s'est produite il faut fermer les curseurs et la connexion
IF EXEC_SQL.IS_CONNECTED(LConn_conn_id) THEN
IF EXEC_SQL.IS_OPEN(LConn_conn_id, LCu_lecture) THEN
EXEC_SQL.CLOSE_CURSOR(LConn_conn_id, LCu_lecture);
END IF;
EXEC_SQL.CLOSE_CONNECTION(LConn_conn_id);
END IF;
RETURN FALSE;
END; |
Partager