replicaFuncoesExternas.plsql
10.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
/*
**********************************************************************************
* *
* @package URBEM CNM - Soluções em Gestão Pública *
* @copyright (c) 2013 Confederação Nacional de Municípos *
* @author Confederação Nacional de Municípios *
* *
* O URBEM CNM é um software livre; você pode redistribuí-lo e/ou modificá-lo sob *
* os termos da Licença Pública Geral GNU conforme publicada pela Fundação do *
* Software Livre (FSF - Free Software Foundation); na versão 2 da Licença. *
* *
* Este programa é distribuído na expectativa de que seja útil, porém, *
* SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU *
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU *
* para mais detalhes. *
* *
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU "LICENCA.txt" *
* com este programa; se não, escreva para a Free Software Foundation Inc., *
* no endereço 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* *
**********************************************************************************
*/
/*
* script de funcao PLSQL
*
* URBEM Soluções de Gestão Pública Ltda
* www.urbem.cnm.org.br
* $Revision: 28532 $
* $Author: anasilvia $
* Date: 2006/06/12 10:50:00 $
*
* Caso de uso: uc-01.03.95
* Objetivo: Copiar uma função já existente
$Id: replicaFuncoesExternas.plsql 59612 2014-09-02 12:00:51Z gelson $
*/
CREATE OR REPLACE FUNCTION replicaFuncoesExternas(integer,integer,integer,integer,integer,varchar) RETURNS boolean AS $$
DECLARE
inCodModuloOrigem ALIAS FOR $1 ;
inCodBibliotecaOrigem ALIAS FOR $2 ;
inCodFuncaoOrigem ALIAS FOR $3 ;
inCodModuloDestino ALIAS FOR $4 ;
inCodBibliotecaDestino ALIAS FOR $5 ;
stNomeDestino ALIAS FOR $6;
stNomeDestinoFuncao VARCHAR := '';
boRetorno BOOLEAN := TRUE;
stSql VARCHAR := '';
nomFuncao VARCHAR := '';
inCodFuncaoDestino INTEGER;
reRegistro record;
sqlFuncao VARCHAR :='';
existeFuncao VARCHAR := '';
existeCorpoPl VARCHAR := '';
BEGIN
SELECT INTO existeFuncao (
SELECT funcao.nom_funcao as nom_funcao
FROM administracao.funcao
INNER JOIN administracao.funcao_externa
ON funcao_externa.cod_funcao = funcao.cod_funcao
AND funcao_externa.cod_modulo = funcao.cod_modulo
AND funcao_externa.cod_biblioteca = funcao.cod_biblioteca
WHERE funcao.cod_funcao = inCodFuncaoOrigem
AND funcao.cod_modulo = inCodModuloOrigem
AND funcao.cod_biblioteca = inCodBibliotecaOrigem
);
SELECT INTO existeCorpoPl (
SELECT UPPER(REPLACE(REPLACE(funcao_externa.corpo_pl,'\\''', ''''), '''','\\''')) as corpo_pl
FROM administracao.funcao
INNER JOIN administracao.funcao_externa
ON funcao_externa.cod_funcao = funcao.cod_funcao
AND funcao_externa.cod_modulo = funcao.cod_modulo
AND funcao_externa.cod_biblioteca = funcao.cod_biblioteca
WHERE funcao.cod_funcao = inCodFuncaoOrigem
AND funcao.cod_modulo = inCodModuloOrigem
AND funcao.cod_biblioteca = inCodBibliotecaOrigem
);
IF ((TRIM(existeFuncao) = '' OR existeFuncao IS NULL) OR (TRIM(existeCorpoPl) = '' OR existeCorpoPl IS NULL)) THEN
boRetorno := false;
ELSE
SELECT INTO inCodFuncaoDestino
(
SELECT COALESCE(MAX(cod_funcao),0)+1
FROM administracao.funcao
WHERE cod_modulo = inCodModuloDestino
AND cod_biblioteca = inCodBibliotecaDestino
);
stSql := 'INSERT INTO administracao.funcao
(SELECT '||inCodModuloDestino||'
, '||inCodBibliotecaDestino||'
, '||inCodFuncaoDestino||'
,cod_tipo_retorno
, '''||stNomeDestino||'''
FROM administracao.funcao
WHERE cod_modulo = '||inCodModuloOrigem||'
AND cod_biblioteca = '||inCodBibliotecaOrigem||'
AND cod_funcao = '||inCodFuncaoOrigem||')';
EXECUTE stSql;
stSql :='INSERT INTO administracao.variavel
(SELECT '||inCodModuloDestino||'
, '||inCodBibliotecaDestino||'
,'||inCodFuncaoDestino||'
,cod_variavel
,nom_variavel
,cod_tipo,valor_inicial
FROM administracao.variavel
WHERE cod_modulo = '||inCodModuloOrigem||'
AND cod_biblioteca = '||inCodBibliotecaOrigem||'
AND cod_funcao = '||inCodFuncaoOrigem||')';
EXECUTE stSql;
stSql :='INSERT INTO administracao.parametro
(SELECT '||inCodModuloDestino||'
, '||inCodBibliotecaDestino||'
,'||inCodFuncaoDestino||'
,cod_variavel
,ordem
FROM administracao.parametro
WHERE cod_modulo = '||inCodModuloOrigem||'
AND cod_biblioteca = '||inCodBibliotecaOrigem||'
AND cod_funcao = '||inCodFuncaoOrigem||')';
EXECUTE stSql;
existeFuncao := UPPER(existeFuncao)||'(';
stNomeDestinoFuncao := UPPER(stNomeDestino)||'(';
existeCorpoPl := REPLACE(existeCorpoPl,existeFuncao,stNomeDestinoFuncao);
stSql :='INSERT INTO administracao.funcao_externa
(SELECT '||inCodModuloDestino||'
, '||inCodBibliotecaDestino||'
,'||inCodFuncaoDestino||'
,comentario
,'||quote_literal(existeCorpoPl)||'
,corpo_ln
FROM administracao.funcao_externa
WHERE cod_modulo = '||inCodModuloOrigem||'
AND cod_biblioteca = '||inCodBibliotecaOrigem||'
AND cod_funcao = '||inCodFuncaoOrigem||')';
EXECUTE stSql;
stSql :=' INSERT INTO administracao.corpo_funcao_externa
(SELECT '||inCodModuloDestino||'
, '||inCodBibliotecaDestino||'
,'||inCodFuncaoDestino||'
,cod_linha
,nivel
,linha
FROM administracao.corpo_funcao_externa
WHERE cod_modulo = '||inCodModuloOrigem||'
AND cod_biblioteca = '||inCodBibliotecaOrigem||'
AND cod_funcao = '||inCodFuncaoOrigem||')';
EXECUTE stSql;
SELECT INTO nomFuncao ( SELECT funcao.nom_funcao as nom_funcao
FROM administracao.funcao
,administracao.funcao_externa
WHERE funcao.cod_funcao = funcao_externa.cod_funcao
AND funcao.cod_modulo = funcao_externa.cod_modulo
AND funcao.cod_biblioteca = funcao_externa.cod_biblioteca
AND funcao.cod_funcao = inCodFuncaoOrigem
AND funcao.cod_modulo = inCodModuloOrigem
AND funcao.cod_biblioteca = inCodBibliotecaOrigem);
SELECT INTO sqlFuncao ( SELECT ' CREATE OR REPLACE ' ||REPLACE(funcao_externa.corpo_pl, '\', '') as comando
FROM administracao.funcao
,administracao.funcao_externa
WHERE funcao.cod_funcao = funcao_externa.cod_funcao
AND funcao.cod_modulo = funcao_externa.cod_modulo
AND funcao.cod_biblioteca = funcao_externa.cod_biblioteca
AND funcao.cod_funcao = inCodFuncaoDestino
AND funcao.cod_modulo = inCodModuloDestino
AND funcao.cod_biblioteca = inCodBibliotecaDestino);
nomFuncao := UPPER(nomFuncao)||'(';
stNomeDestinoFuncao := UPPER(stNomeDestino)||'(';
sqlFuncao := REPLACE(sqlFuncao,nomFuncao,stNomeDestinoFuncao);
EXECUTE sqlFuncao;
END IF;
RETURN boRetorno;
END;
$$ LANGUAGE 'plpgsql';