PROCEDURE exec_clob_sql_statement(vv_clob_sql_statement IN clob) IS
v_cur INTEGER := DBMS_SQL.open_cursor;
v_offset PLS_INTEGER :=1;
v_nb PLS_INTEGER :=0;
v_sql_table DBMS_SQL.varchar2a;
v_len PLS_INTEGER;
v_retval INTEGER;
BEGIN
v_len := DBMS_LOB.getlength(vv_clob_sql_statement);
LOOP
v_nb:=v_nb+1;
v_sql_table(v_nb):=DBMS_LOB.SUBSTR(vv_clob_sql_statement
,LEAST(4000,v_len - v_offset + 1)
,v_offset
);
v_offset:=v_offset + 4000;
EXIT WHEN v_offset > v_len;
END LOOP;
DBMS_SQL.parse(v_cur, v_sql_table, 1, v_nb, FALSE, DBMS_SQL.native);
v_retval:=DBMS_SQL.EXECUTE(v_cur);
DBMS_SQL.close_cursor(v_cur);
EXCEPTION WHEN OTHERS THEN
IF DBMS_SQL.is_open(v_cur) THEN DBMS_SQL.close_cursor(v_cur); END IF;
RAISE;
END exec_clob_sql_statement;