Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/05/2010, 22:35
alejandro860
 
Fecha de Ingreso: mayo-2010
Mensajes: 1
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación fetch dinamico en ref cursor

PROCEDURE get_conflict_orignal_record( error_table_name in VARCHAR2,
> id_error IN number, original OUT type_ref_cursor, constraint_name in
> VARCHAR2) is
>
>
> stmt_where varchar2(100);
> str varchar2(100);
> campo VARCHAR2(40);
> v_sql varchar2(32767);
> cont number (11);
>
>
> pos number (3);
> BEGIN
>
> --NECESITABA HACER ESTO PARA PODER DECLARAR EL ROWTYPE DINAMICO, SEGUN EL
> NOMBRE DE TABLA Q SE LE ENTRA POR PARAMETRO v_sql := '
>
> rec '||error_table_name||'MIA%ROWTYPE;
>
> colum util_package.type_columns :=
> util_package.type_columns('','','','','','','','', '','','','','','','','',
> '','','','','','','','','','','','','','','','','' ,'','','','','','','');
> cont number(11);
>
>
> constraint_row_table constraints_col_temp%rowtype;
> stmt_where varchar2(500);
> campo VARCHAR2(40);
> pos number (3);
> ejemplo VARCHAR2(40);
> tbl_name VARCHAR2(40);
> id_e number(11);
>
> col VARCHAR2(60);
> error_record util_package.type_ref_cursor;
> constraint_table util_package.type_ref_cursor;
>
> BEGIN
>
>
> OPEN error_record FOR '||' select * from '||error_table_name||'MIA
> where id_error='||id_error||';
>
>
> OPEN
> constraint_table FOR '||' select * from constraints_col_temp where
> nombre_constraint = '''|| constraint_name||''' and nombre_tabla = '''||
> error_table_name||''' '||' ;
>
>
> cont:= 1;
> stmt_where := '' '';
> loop
> fetch error_record into rec;
> --ESTA ES UNA TUPLA QUE RECUPERO PARA
> SABER CON CUAL TUPLA ORIGINAL ..
EXIT WHEN error_record%NOTFOUND;
>
>
> loop
> fetch constraint_table into constraint_row_table;
> EXIT WHEN constraint_table%NOTFOUND;
>
>
>
>
> --LO QUE INTENTO HACER ES QUE POR CADA VALOR DE COLUMNA QUE TENGO EN
> constraint_row_table, PODER OBTENER SU VALOR EN rec, O SEA SI EL CAMPO EN
> CUESTION ES ID_DOCUMENTO ENTONCES NECESITARIA IMPRIMIR REC.ID_DOCUMENTO,
> POR ESO PONGO ALGO COMO LO SIGIENTE, PERO LO QUE ME IMPRIME ES ES EL
> TEXTO, NO NO EL VALOR, ME IMPRIME "rec.id_documento" y no el id que es lo
> que necesito, al final todo eso es para construir un where donde pueda
> buscar la tupla original que dio el error, los campos que se obtienen en
> constraint_table son los campos que conforman la constraint que se violo,
> por lo que con ellos puedo obtener la tupla original.
>
> DBMS_OUTPUT.PUT_LINE (rec.constraint_row_table.campo); --esto no funciona
--LA IDEA AL FINAL ES HACER UN WHERE ALGO
> COMO ESTO Y ASI SUCESIVAMENTE POR CADA CAMPO, AL FINAL LE QUITO EL ULTIMO
> AND Y LE PONGO UN ;
>
> stmt_where := stmt_where||' '||constraint_row_table.campo||'=
> '||rec.constraint_row_table.campo||' and';
>
>
> end loop;
>
> end loop;
>
> END;';
>
>
> EXECUTE IMMEDIATE v_sql;
>
>
> end;