Bom dia,
Preciso criar um cursor para que seja criado grants entre duas tabelas.
Foi me passado um esboço, porém, estou com dificuldades para compreender e fazer o devido cursor.
Segue abaixo :
DECLARE
/*
Alterar as variáveis:
SCHEMA_SUFIX: Preencher com o dono do objeto, somente o sufixo DATA, DATA_INT, CONFIG e etc; Se for o esquema principal, deixe vazio;
GRANT_PRIVILEGES: Quais privilegios ceder (ALL, EXECUTE, SELECT e etc);
TABLE_NAME: Nome do objeto;
*/
SCHEMA_SUFIX VARCHAR2(50) := ‘DATA’;
GRANT_PRIVILEGES VARCHAR2(50) := ‘ALL’;
OBJECT_GRANTED VARCHAR2(50) := ‘TESTES’;
/*
Não alterar as variáveis:
SCHEMA_PREFIX: Irá pegar dinamicamente o valor do prefixo;
*/
SCHEMA_PREFIX VARCHAR2(50) := ‘BANCO’;
BEGIN
DECLARE
/* DECLARANDO O CURSOR DE EMPLOYEES */
CURSOR C_EMP IS
SELECT regexp_substr(tabelas, separador, 1, LEVEL) tabelas
FROM (SELECT 'Tabela_numero1, Tabela_numero2 tabelas, ‘[^;]+’ separador FROM dual)
CONNECT BY regexp_substr(tabelas, separador, 1, LEVEL) IS NOT NULL;
/* DECLARANDO A VARIAVEL QUE RECEBERÁ OS REGISTROS DA TABELA */
R_EMP C_EMP%ROWTYPE;
BEGIN
/* ABRE CURSOR */
OPEN C_EMP;
LOOP
/* LÊ UM REGISTRO DO CURSOR */
FETCH C_EMP
INTO R_EMP;
/* SAI DO LOOP CASO SEJA O FINAL DO CURSOR */
EXIT WHEN C_EMP%NOTFOUND;
IF SCHEMA_SUFIX IS NULL THEN
EXECUTE IMMEDIATE 'GRANT ' || GRANT_PRIVILEGES || ' ON ' || OBJECT_GRANTED || ' TO ' || SCHEMA_PREFIX;
ELSE
EXECUTE IMMEDIATE 'GRANT ' || GRANT_PRIVILEGES || ' ON ' || OBJECT_GRANTED || ' TO ' || SCHEMA_PREFIX || '_' || SCHEMA_SUFIX;
END IF;
END LOOP;
/* FECHA O CURSOR */
CLOSE C_EMP;
END;
/