Ajuda criação de cursor - Oracle

0 respostas
Nadall

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;
/

Criado 21 de maio de 2018
Respostas 0
Participantes 1