Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.tools -> dynamic sql, error ora-06512
I am attempting to clean the data that is in a holding table. I am doing this column by column. I am also using dynamic sql to create the update statement. The parse procedure keeps giving me the following error:
ERROR at line 1:
ORA-01747: invalid user.table.column, table.column, or column
specification
ORA-06512: at "SYS.DBMS_SYS_SQL", line 491 ORA-06512: at "SYS.DBMS_SQL", line 32 ORA-06512: at "EXPRESS.DYNAMIC_BATCH_DATA", line 34 ORA-06512: at line 1
The whole procedure is as follows:
CREATE OR REPLACE
PROCEDURE dynamic_batch_data(p_table_name IN VARCHAR2)
IS
CURSOR column_cursor IS SELECT column_name FROM user_tab_columns WHERE table_name = UPPER(p_table_name); CURSOR column_count IS SELECT COUNT(column_name) FROM user_tab_columns WHERE table_name = UPPER(p_table_name); v_update_clause VARCHAR2(200); v_loop_control BOOLEAN := TRUE; v_cursor_pointer INTEGER; v_column_name VARCHAR2(30); v_rows_updated INTEGER; array DBMS_SQL.VARCHAR2_TABLE; v_count INTEGER; v_num_columns NUMBER; BEGIN OPEN column_cursor; OPEN column_count; FETCH column_count INTO v_num_columns; WHILE v_loop_control LOOP IF v_num_columns - column_cursor%ROWCOUNT < 20 THEN v_count := v_num_columns - column_cursor% ROWCOUNT; ELSE v_count := 20; END IF; FOR i IN 1..v_count LOOP FETCH column_cursor INTO array(i); END LOOP; v_update_clause := 'UPDATE '||p_table_name||' SET :column_array = UPPER(RTRIM(LTRIM(:column_array)))'; v_cursor_pointer := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(v_cursor_pointer, v_update_clause, DBMS_SQL.NATIVE); DBMS_SQL.BIND_ARRAY(v_cursor_pointer, ':column_array', array); v_rows_updated := DBMS_SQL.EXECUTE(v_cursor_pointer);
(v_cursor_pointer); DBMS_SQL.CLOSE_CURSOR
IF column_cursor%NOTFOUND THEN v_loop_control := FALSE; END IF; END LOOP; CLOSE column_cursor;
![]() |
![]() |