Como hacer Drop Public Synonym masivos

froiland
31 de Marzo del 2005
Pues eso , quiero hacer un drop synonym para todos ellos q se hace con sql dinamico pero me esta dando fallos.

Este es el codigo:
declare
PRAGMA Restrict_References;
rows_processed NUMBER;
cur_hdl NUMBER;
stmt_str VARCHAR2(1000);


cursor v_t is select synonym_name
from dba_synonyms
where table_owner='RASC';

v_c dba_constraints.table_name%TYPE;
v_cons dba_constraints.constraint_name%type;

begin

open v_t;
fetch v_t into v_c;

while v_t%FOUND loop

stmt_str := 'drop public synonym :v_1';
cur_hdl := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE (cur_hdl,stmt_str,DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(cur_hdl,':v_1',v_c);
rows_processed := dbms_sql.execute(cur_hdl);
DBMS_SQL.CLOSE_CURSOR(cur_hdl);

--dbms_output.put_line(v_c);
fetch v_t into v_c;

end loop;

close v_t;
end;



Gracias

Rodolfo Reyes
31 de Marzo del 2005
¿Que error te da exactamente?

Estas ejecutando este programa con un usuario con los permisos suficientes para eliminar los sinonimos.

Y solo una pequeña aclaración, con el query en donde buscas los nombres de los sinonimos. Este no te esta devolviendo solo los sinonimos publicos, si no que te esta devolviendo todos los sinonimos Publicos y privados que hacen referencia, a los objetos del esquema 'RASC'.

Puede ser que se tope con un sinonimo que no sea publico, y cuando pasa esto, el codigo que estas ejecutando para hacer la eliminación da errores.

froiland
31 de Marzo del 2005
Todos los sinonimos son publicos , por eso deje la query asi y el error q me da es el :

*
ERROR en línea 1:
ORA-00995: falta el identificador de sinónimos o no es válido
ORA-06512: en "SYS.DBMS_SYS_SQL", línea 826
ORA-06512: en "SYS.DBMS_SQL", línea 39
ORA-06512: en línea 23


y seguro q tiene los permisos pq es sys el usuario

Rodolfo Reyes
31 de Marzo del 2005
Prueba con:

Execute immediate 'drop public synonym nombre_sinonimo'

Si al ejecutar esto te da problemas. Quiere decir que te hace falta algun permiso. Prueba darle el permiso para eliminar cualquier sinonimo. No importa que sea el usaurio de SYS, prueba darselo lo peor que te puede pasar es que no funcione.

froiland
31 de Marzo del 2005
La principal duda q tengo es si este tipo de drop se pueden hacer con sql dinamico, o no. Si el codigo esta mal por otra cosa ya lo arreglare.
Alguien sabe si existe esta limitacion?

no
31 de Marzo del 2005
la respuesta es no
revisa tus permisos y quien lanza el execute immediate

Olora Vagina
31 de Marzo del 2005
Si eres capaz de comerme el coño sin desfallecer durante un par de horas te lo digo.

Besitos