colocar função if em meio a uma stored procedure...
CREATE PROCEDURE MEMBROSDIZIMOS_RELATORIO2 (
CODIGREJA_IN INTEGER,
CODMEMBRO_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1))
AS
BEGIN
FOR SELECT MD.CODIGO,
MD.CODIGREJA,
MD.CODMEMBRO,
MD.DT_INSCRICAO,
MD.DT_ALTERACAO,
MD.DATA,
MD.VALOR,
MD.CODTIPOSPAGAMENTOS,
MD.OBSERVACOES,
MD.CHQ_BANCO,
MD.CHQ_AGENCIA,
MD.CHQ_NUMERO,
MD.CHQ_CONTACORRENTE,
MD.CAR_NUMERO,
TP.TIPO AS TIPO_TIPOSPAGAMENTOS,
TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,
TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,
M.NOME AS NOME_MEMBROS,
I.NOME AS NOME_IGREJAS
FROM MEMBROSDIZIMOS MD
INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)
INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)
LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)
WHERE (MD.CODIGREJA = :CODIGREJA_IN)
AND (extract(year from MD.DATA) = :ANO_IN)
ORDER BY I.NOME, M.NOME,
extract(year from MD.DATA) ASC,
extract(month from MD.DATA) ASC,
extract(day from MD.DATA) ASC
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS
DO
BEGIN
SUSPEND;
END
Eu gostaria de fazer um stored procedure do tipo personalizada, tipo:
Eu criar um novo parametro de entrada chamado ´CODMEMBRO_IN´
o que eu gostaria de fazer é o seguinte:
Na cláusula ´WHERE´ colocar tipo:
IF CODMEMBRO_IN IS NOT NULL THEN
AND (MD.CODMEMBRO = :CODMEMBRO_IN);
CODIGREJA_IN INTEGER,
CODMEMBRO_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1))
AS
BEGIN
FOR SELECT MD.CODIGO,
MD.CODIGREJA,
MD.CODMEMBRO,
MD.DT_INSCRICAO,
MD.DT_ALTERACAO,
MD.DATA,
MD.VALOR,
MD.CODTIPOSPAGAMENTOS,
MD.OBSERVACOES,
MD.CHQ_BANCO,
MD.CHQ_AGENCIA,
MD.CHQ_NUMERO,
MD.CHQ_CONTACORRENTE,
MD.CAR_NUMERO,
TP.TIPO AS TIPO_TIPOSPAGAMENTOS,
TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,
TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,
M.NOME AS NOME_MEMBROS,
I.NOME AS NOME_IGREJAS
FROM MEMBROSDIZIMOS MD
INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)
INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)
LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)
WHERE (MD.CODIGREJA = :CODIGREJA_IN)
AND (extract(year from MD.DATA) = :ANO_IN)
ORDER BY I.NOME, M.NOME,
extract(year from MD.DATA) ASC,
extract(month from MD.DATA) ASC,
extract(day from MD.DATA) ASC
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS
DO
BEGIN
SUSPEND;
END
Eu gostaria de fazer um stored procedure do tipo personalizada, tipo:
Eu criar um novo parametro de entrada chamado ´CODMEMBRO_IN´
o que eu gostaria de fazer é o seguinte:
Na cláusula ´WHERE´ colocar tipo:
IF CODMEMBRO_IN IS NOT NULL THEN
AND (MD.CODMEMBRO = :CODMEMBRO_IN);
Thiagopedro
Curtidas 0
Respostas
Acacio
19/06/2006
É só colocar entre parenteses, e coloca os dois pontos como coloquei.
IF (:CODMEMBRO_IN IS NOT NULL) THEN
IF (:CODMEMBRO_IN IS NOT NULL) THEN
GOSTEI 0
Thiagopedro
19/06/2006
É só colocar entre parenteses, e coloca os dois pontos como coloquei.
IF (:CODMEMBRO_IN IS NOT NULL) THEN
Amigo já tentei fazer assim também como vc disse.
Estou postando abaixo o código completo que tentei colocar na stored procedure no IBExpert.
Notem que apenas há alteração na clause ´IF´ adicionada em relação ao primeiro exemplo da minha dúvida.
BEGIN
FOR SELECT MD.CODIGO,
MD.CODIGREJA,
MD.CODMEMBRO,
MD.DT_INSCRICAO,
MD.DT_ALTERACAO,
MD.DATA,
MD.VALOR,
MD.CODTIPOSPAGAMENTOS,
MD.OBSERVACOES,
MD.CHQ_BANCO,
MD.CHQ_AGENCIA,
MD.CHQ_NUMERO,
MD.CHQ_CONTACORRENTE,
MD.CAR_NUMERO,
TP.TIPO AS TIPO_TIPOSPAGAMENTOS,
TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,
TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,
M.NOME AS NOME_MEMBROS,
I.NOME AS NOME_IGREJAS
FROM MEMBROSDIZIMOS MD
INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)
INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)
LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)
WHERE (MD.CODIGREJA = :CODIGREJA_IN) AND (extract(year from MD.DATA) = :ANO_IN)
IF (:CODMEMBRO_IN IS NOT NULL) THEN
AND (MD.CODMEMBRO = :CODMEMBRO_IN)
ORDER BY I.NOME, M.NOME,
extract(year from MD.DATA) ASC,
extract(month from MD.DATA) ASC,
extract(day from MD.DATA) ASC
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS
DO
BEGIN
SUSPEND;
END
END
Quando tento compilar no IBExpert dá o seguinte erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 51, column 7.
IF.
GOSTEI 0
Acacio
19/06/2006
Jogue todo o teu sql até antes do where numa string
e depois use como no exemplo
-----------------------------------------
declare variable scripty varchar(1000);
begin
scripty = ´select codcli,nomcli,data from tabcliente´ ||
if (:varaux = ´1´) then
´where codcli = ´ || varentr1
else
if (:varaux = ´2´) then
´where codcli = ´ || varentr2
for execute statement scripty do
into :codigo,:nome:data1;
begin
suspend;
end
e depois use como no exemplo
-----------------------------------------
declare variable scripty varchar(1000);
begin
scripty = ´select codcli,nomcli,data from tabcliente´ ||
if (:varaux = ´1´) then
´where codcli = ´ || varentr1
else
if (:varaux = ´2´) then
´where codcli = ´ || varentr2
for execute statement scripty do
into :codigo,:nome:data1;
begin
suspend;
end
GOSTEI 0
Thiagopedro
19/06/2006
Corrigi conforme você disse e ficou assim:
===============
ALTER PROCEDURE MEMBROSDIZIMOS_RELATORIO2 (
CODIGREJA_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1),
ANO INTEGER,
MES INTEGER,
DIA INTEGER)
AS
DECLARE VARIABLE SCRIPTY VARCHAR(1000);
BEGIN
scripty = ´
SELECT MD.CODIGO,
MD.CODIGREJA,
MD.CODMEMBRO,
MD.DT_INSCRICAO,
MD.DT_ALTERACAO,
MD.DATA,
MD.VALOR,
MD.CODTIPOSPAGAMENTOS,
MD.OBSERVACOES,
MD.CHQ_BANCO,
MD.CHQ_AGENCIA,
MD.CHQ_NUMERO,
MD.CHQ_CONTACORRENTE,
MD.CAR_NUMERO,
TP.TIPO AS TIPO_TIPOSPAGAMENTOS,
TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,
TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,
M.NOME AS NOME_MEMBROS,
I.NOME AS NOME_IGREJAS,
extract(year from MD.DATA) AS ANO,
extract(month from MD.DATA) AS MES,
extract(day from MD.DATA) AS DIA
FROM MEMBROSDIZIMOS MD
INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)
INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)
LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)
WHERE (MD.CODIGREJA = :CODIGREJA_IN)
AND (extract(year from MD.DATA) = :ANO_IN)
ORDER BY I.NOME,
extract(year from MD.DATA) ASC,
extract(month from MD.DATA) ASC,
extract(day from MD.DATA) ASC,
M.NOME ´ ;
for execute statement scripty do
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS,
:ANO,
:MES,
:DIA
DO
BEGIN
SUSPEND;
END
END
============================
Está dando erro
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 65, column 33.
do.
===============
ALTER PROCEDURE MEMBROSDIZIMOS_RELATORIO2 (
CODIGREJA_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1),
ANO INTEGER,
MES INTEGER,
DIA INTEGER)
AS
DECLARE VARIABLE SCRIPTY VARCHAR(1000);
BEGIN
scripty = ´
SELECT MD.CODIGO,
MD.CODIGREJA,
MD.CODMEMBRO,
MD.DT_INSCRICAO,
MD.DT_ALTERACAO,
MD.DATA,
MD.VALOR,
MD.CODTIPOSPAGAMENTOS,
MD.OBSERVACOES,
MD.CHQ_BANCO,
MD.CHQ_AGENCIA,
MD.CHQ_NUMERO,
MD.CHQ_CONTACORRENTE,
MD.CAR_NUMERO,
TP.TIPO AS TIPO_TIPOSPAGAMENTOS,
TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,
TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,
M.NOME AS NOME_MEMBROS,
I.NOME AS NOME_IGREJAS,
extract(year from MD.DATA) AS ANO,
extract(month from MD.DATA) AS MES,
extract(day from MD.DATA) AS DIA
FROM MEMBROSDIZIMOS MD
INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)
INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)
LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)
WHERE (MD.CODIGREJA = :CODIGREJA_IN)
AND (extract(year from MD.DATA) = :ANO_IN)
ORDER BY I.NOME,
extract(year from MD.DATA) ASC,
extract(month from MD.DATA) ASC,
extract(day from MD.DATA) ASC,
M.NOME ´ ;
for execute statement scripty do
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS,
:ANO,
:MES,
:DIA
DO
BEGIN
SUSPEND;
END
END
============================
Está dando erro
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 65, column 33.
do.
GOSTEI 0
Acacio
19/06/2006
Coloquei um exemplo abaixo. Mas a string com o sql pode ser feita no delphi ou no compilador que você usa.
Criei as tabelas a facao mas a procedure foi criada;
CREATE OR ALTER PROCEDURE MEMBROSDIZIMOS_RELATORIO2 (
CODIGREJA_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1),
ANO INTEGER,
MES INTEGER,
DIA INTEGER)
AS
DECLARE VARIABLE SCRIPTY VARCHAR(1500);
BEGIN
scripty = ´SELECT MD.CODIGO,MD.CODIGREJA,MD.CODMEMBRO,´ ||
´MD.DT_INSCRICAO,MD.DT_ALTERACAO,MD.DATA,´ ||
´MD.VALOR,MD.CODTIPOSPAGAMENTOS,MD.OBSERVACOES,´ ||
´MD.CHQ_BANCO,MD.CHQ_AGENCIA,MD.CHQ_NUMERO,´ ||
´MD.CHQ_CONTACORRENTE,MD.CAR_NUMERO,´||
´TP.TIPO AS TIPO_TIPOSPAGAMENTOS,´||
´TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,´||
´TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,´||
´M.NOME AS NOME_MEMBROS,´||
´I.NOME AS NOME_IGREJAS,´||
´extract(year from MD.DATA) AS ANO,´||
´extract(month from MD.DATA) AS MES,´||
´extract(day from MD.DATA) AS DIA´||
´FROM MEMBROSDIZIMOS MD´||
´INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)´||
´INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)´||
´LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)´||
´WHERE (MD.CODIGREJA = ´ || :CODIGREJA_IN || ´)´ ||
´AND (extract(year from MD.DATA) = ´ || :ANO_IN || ´)´ ||
´ORDER BY I.NOME,extract(year from MD.DATA) ASC,´ ||
´extract(month from MD.DATA) ASC,´ ||
´extract(day from MD.DATA) ASC,M.NOME;´;
for execute statement scripty
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS,
:ANO,
:MES,
:DIA
DO
BEGIN
SUSPEND;
END
END
Criei as tabelas a facao mas a procedure foi criada;
CREATE OR ALTER PROCEDURE MEMBROSDIZIMOS_RELATORIO2 (
CODIGREJA_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1),
ANO INTEGER,
MES INTEGER,
DIA INTEGER)
AS
DECLARE VARIABLE SCRIPTY VARCHAR(1500);
BEGIN
scripty = ´SELECT MD.CODIGO,MD.CODIGREJA,MD.CODMEMBRO,´ ||
´MD.DT_INSCRICAO,MD.DT_ALTERACAO,MD.DATA,´ ||
´MD.VALOR,MD.CODTIPOSPAGAMENTOS,MD.OBSERVACOES,´ ||
´MD.CHQ_BANCO,MD.CHQ_AGENCIA,MD.CHQ_NUMERO,´ ||
´MD.CHQ_CONTACORRENTE,MD.CAR_NUMERO,´||
´TP.TIPO AS TIPO_TIPOSPAGAMENTOS,´||
´TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,´||
´TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,´||
´M.NOME AS NOME_MEMBROS,´||
´I.NOME AS NOME_IGREJAS,´||
´extract(year from MD.DATA) AS ANO,´||
´extract(month from MD.DATA) AS MES,´||
´extract(day from MD.DATA) AS DIA´||
´FROM MEMBROSDIZIMOS MD´||
´INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)´||
´INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)´||
´LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)´||
´WHERE (MD.CODIGREJA = ´ || :CODIGREJA_IN || ´)´ ||
´AND (extract(year from MD.DATA) = ´ || :ANO_IN || ´)´ ||
´ORDER BY I.NOME,extract(year from MD.DATA) ASC,´ ||
´extract(month from MD.DATA) ASC,´ ||
´extract(day from MD.DATA) ASC,M.NOME;´;
for execute statement scripty
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS,
:ANO,
:MES,
:DIA
DO
BEGIN
SUSPEND;
END
END
GOSTEI 0
Thiagopedro
19/06/2006
E o IF ??????????? Na procedure ????????????
GOSTEI 0
Acacio
19/06/2006
Fiz outro exemplo
CREATE OR ALTER PROCEDURE MEMBROSDIZIMOS_RELATORIO(
CODIGREJA_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1),
ANO INTEGER,
MES INTEGER,
DIA INTEGER)
AS
DECLARE VARIABLE SCRIPTY VARCHAR(1500);
BEGIN
scripty = ´SELECT MD.CODIGO,MD.CODIGREJA,MD.CODMEMBRO,´ ||
´MD.DT_INSCRICAO,MD.DT_ALTERACAO,MD.DATA,´ ||
´MD.VALOR,MD.CODTIPOSPAGAMENTOS,MD.OBSERVACOES,´ ||
´MD.CHQ_BANCO,MD.CHQ_AGENCIA,MD.CHQ_NUMERO,´ ||
´MD.CHQ_CONTACORRENTE,MD.CAR_NUMERO,´||
´TP.TIPO AS TIPO_TIPOSPAGAMENTOS,´||
´TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,´||
´TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,´||
´M.NOME AS NOME_MEMBROS,´||
´I.NOME AS NOME_IGREJAS,´||
´extract(year from MD.DATA) AS ANO,´||
´extract(month from MD.DATA) AS MES,´||
´extract(day from MD.DATA) AS DIA´||
´FROM MEMBROSDIZIMOS MD´||
´INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)´||
´INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)´||
´LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)´;
if (:CODIGREJA_IN = 1) then
scripty = scripty || ´ WHERE (MD.CODIGREJA = ´ || :CODIGREJA_IN || ´)´;
else
scripty = scripty || ´ WHERE (MD.CODIGREJA = ´ || :CODIGREJA_IN || ´)´
|| ´AND (extract(year from MD.DATA) = ´ || :ANO_IN || ´)´ ||
´ORDER BY I.NOME,extract(year from MD.DATA) ASC,´ ||
´extract(month from MD.DATA) ASC,´ ||
´extract(day from MD.DATA) ASC,M.NOME;´;
for execute statement scripty
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS,
:ANO,
:MES,
:DIA
DO
BEGIN
SUSPEND;
END
END
CREATE OR ALTER PROCEDURE MEMBROSDIZIMOS_RELATORIO(
CODIGREJA_IN INTEGER,
ANO_IN INTEGER)
RETURNS (
NOME_MEMBROS VARCHAR(50),
NOME_IGREJAS VARCHAR(50),
DATA DATE,
CODIGO INTEGER,
CODIGREJA INTEGER,
CODMEMBRO INTEGER,
DT_INSCRICAO DATE,
DT_ALTERACAO DATE,
VALOR NUMERIC(15,2),
CODTIPOSPAGAMENTOS INTEGER,
OBSERVACOES VARCHAR(50),
CHQ_BANCO VARCHAR(3),
CHQ_AGENCIA VARCHAR(5),
CHQ_NUMERO VARCHAR(10),
CHQ_CONTACORRENTE VARCHAR(10),
CAR_NUMERO VARCHAR(10),
TIPO_TIPOSPAGAMENTOS VARCHAR(30),
CHEQUE_TIPOSPAGAMENTOS CHAR(1),
CARTAO_TIPOSPAGAMENTOS CHAR(1),
ANO INTEGER,
MES INTEGER,
DIA INTEGER)
AS
DECLARE VARIABLE SCRIPTY VARCHAR(1500);
BEGIN
scripty = ´SELECT MD.CODIGO,MD.CODIGREJA,MD.CODMEMBRO,´ ||
´MD.DT_INSCRICAO,MD.DT_ALTERACAO,MD.DATA,´ ||
´MD.VALOR,MD.CODTIPOSPAGAMENTOS,MD.OBSERVACOES,´ ||
´MD.CHQ_BANCO,MD.CHQ_AGENCIA,MD.CHQ_NUMERO,´ ||
´MD.CHQ_CONTACORRENTE,MD.CAR_NUMERO,´||
´TP.TIPO AS TIPO_TIPOSPAGAMENTOS,´||
´TP.CHEQUE AS CHEQUE_TIPOSPAGAMENTOS,´||
´TP.CARTAO AS CARTAO_TIPOSPAGAMENTOS,´||
´M.NOME AS NOME_MEMBROS,´||
´I.NOME AS NOME_IGREJAS,´||
´extract(year from MD.DATA) AS ANO,´||
´extract(month from MD.DATA) AS MES,´||
´extract(day from MD.DATA) AS DIA´||
´FROM MEMBROSDIZIMOS MD´||
´INNER JOIN IGREJAS I ON (MD.CODIGREJA = I.CODIGO)´||
´INNER JOIN MEMBROS M ON (MD.CODMEMBRO = M.CODIGO)´||
´LEFT OUTER JOIN TIPOSPAGAMENTOS TP ON (MD.CODTIPOSPAGAMENTOS = TP.CODIGO)´;
if (:CODIGREJA_IN = 1) then
scripty = scripty || ´ WHERE (MD.CODIGREJA = ´ || :CODIGREJA_IN || ´)´;
else
scripty = scripty || ´ WHERE (MD.CODIGREJA = ´ || :CODIGREJA_IN || ´)´
|| ´AND (extract(year from MD.DATA) = ´ || :ANO_IN || ´)´ ||
´ORDER BY I.NOME,extract(year from MD.DATA) ASC,´ ||
´extract(month from MD.DATA) ASC,´ ||
´extract(day from MD.DATA) ASC,M.NOME;´;
for execute statement scripty
INTO :CODIGO,
:CODIGREJA,
:CODMEMBRO,
:DT_INSCRICAO,
:DT_ALTERACAO,
:DATA,
:VALOR,
:CODTIPOSPAGAMENTOS,
:OBSERVACOES,
:CHQ_BANCO,
:CHQ_AGENCIA,
:CHQ_NUMERO,
:CHQ_CONTACORRENTE,
:CAR_NUMERO,
:TIPO_TIPOSPAGAMENTOS,
:CHEQUE_TIPOSPAGAMENTOS,
:CARTAO_TIPOSPAGAMENTOS,
:NOME_MEMBROS,
:NOME_IGREJAS,
:ANO,
:MES,
:DIA
DO
BEGIN
SUSPEND;
END
END
GOSTEI 0