I am trying to use a strong ref cur with dynamic sql statment but it is giving out an error,but when i use weak cursor it works,Please explain what is the reason and please
forward me any link of oracle server architect containing matter about how compilation and parsing is done in Oracle server. THIS is the error along with code.
ERROR at line 6:
ORA-06550: line 6, column 7:
PLS-00455: cursor 'EMP_REF_CUR' cannot be used in dynamic SQL OPEN statement
ORA-06550: line 6, column 2:
PL/SQL: Statement ignored
declare
type ref_cur_type IS REF CURSOR RETURN employees%ROWTYPE; --Creating a strong REF cursor,employees is a table
emp_ref_cur ref_cur_type;
emp_rec employees%ROWTYPE;
BEGIN
OPEN emp_ref_cur FOR 'SELECT * FROM employees';
LOOP
FETCH emp_ref_cur INTO emp_rec;
EXIT WHEN emp_ref_cur%NOTFOUND;
END lOOP;
END;
Here is a procedure with a strongly-typed ref cursor:
This next statement fails because the signature of the EMP record doesn’t match that of DEPT table.
But if we change the projection to match the DEPT table then we have success again:
So, why can’t we use a strongly-typed ref-cursor with dynamic SQL?
Because the compiler cannot parse the string in the dynamic SQL statement. So it cannot assert that the columns in the query’s projection match in number and datatype the signature of the ref cursor. Consequently it cannot validate the contract between the ref cursor variable and the query. It is even easier to understand why this cannot be allowed when we consider that the dynamic SQL statement could be assembled from a query on USER_TAB_COLUMNS.