Semana 20 – Difícil

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.

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:

A screenshot of a phoneDescription automatically generated

El segundo debe producir un resultado como este:

A screenshot of a computerDescription automatically generated

Recuerda que si deseas participar:

  1. 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).
  2. 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).
  3. 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.

Previous
Previous

Semana 20 - Procedimientos Almacenados y UDFs

Next
Next

Semana 18 - Snowpark & Python