Si conoces tus factoides de SnowPro, sabrás que cuando CLONAS un objeto, sólo puedes replicar las concesiones sobre ese objeto si ese objeto es una tabla. ¿Pero no sería la vida más fácil si ese no fuera el caso? Pues… ¡haz que lo sea!
Su reto es crear un procedimiento almacenado que no sólo cree un clon de un esquema, sino que replique todas las concesiones en ese esquema. Este procedimiento debe ser capaz de aceptar una sentencia personalizada ‘AT’ o ‘BEFORE’ escrita por el usuario.
Código de inicio
create or replace role frosty_role_one;
create or replace role frosty_role_two;
create or replace role frosty_role_three;
create or replace schema cold_lonely_schema;
create or replace table cold_lonely_schema.table_one (key int, value varchar); grant all on schema cold_lonely_schema to frosty_role_one;
grant all on schema cold_lonely_schema to frosty_role_two;
grant all on schema cold_lonely_schema to frosty_role_three;
grant all on table cold_lonely_schema.table_one to frosty_role_one;
grant all on table cold_lonely_schema.table_one to frosty_role_two;
grant all on table cold_lonely_schema.table_one to frosty_role_three;
create or replace procedure schema_clone_with_copy_grants(database_name string, <code_here>
call schema_clone_with_copy_grants('frosty_friday', 'cold_lonely_schema', 'frosty_friday', 'cold_lonely_clone', NULL);
select * from table(information_schema.query_history_by_session()) order by start_time desc;
Preste atención a los parámetros que se pasan a la función:
- database_name = este debe ser el nombre de la base de datos del esquema original
- schema_name = debe ser el nombre del esquema original
- target_database = debe ser la base de datos del esquema clonado
- cloned_schema_name = debe ser el nombre del esquema clonado
- at_or_before_statement = el usuario debe poder proporcionar una sentencia AT/BEFORE personalizada que se añadirá a la sentencia CREATE …. CLONE. Por ejemplo
- ‘at (timestamp => to_timestamp_tz(’04/05/2013 01:02:03’, ‘mm/dd/yyyy hh24:mi:ss’));’
- ‘before (statement => ‘8e5d0ca9-005e-44e6-b858-a8f5b37c5726′);’
Con el último parámetro, el código anterior pasa un NULL. ¡Puntos extra para los que comprueben que esta parte de su código funciona!
Resultado
La primera consulta de la sentencia ‘call’ debería producir lo siguiente:
El segundo debe producir un resultado como este:
Recuerda que si deseas participar:
- Regístrate como miembro de Frosty Friday. Puedes hacerlo haciendo clic en la barra lateral y luego yendo a «REGISTRARSE» (ten en cuenta que unirte a nuestra lista de correo no te proporcionará una cuenta de Frosty Friday).
- Publica tu código en GitHub y asegúrate de que sea de acceso público (consulta nuestra guía si no sabes cómo hacerlo).
- Publica la URL en los comentarios del desafío.
Si tienes alguna pregunta técnica que te gustaría plantear a la comunidad, puedes hacerlo aquí, en nuestro hilo dedicado a estos retos.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.