Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde Galera,
Estou começando agora a trabalhar com Oracle PL/SQL,
e estou tendo problemas para executar uma procedure dentro de outra procedure!
criei uma procedure,
e fiz o seguinte select
SELECT DATAAGENDAHOR, HORAAGENDAHOR
INTO DATAAGENDA, HORAAGENDA
FROM RET_VAGAAGENDAPREHOR;
RET_VAGAAGENDAPREHOR
É O PROCEDIMENTO O QUAL TERIA QUE SER EXECUTADO,
SEGUE ABAIXO O CÓDIGO DA PROCEDURE:
create or replace
PROCEDURE GER_EXAMEAUDIO
(
CODIAGENDAPRE IN NUMBER,
IDGUIASPSADTPROC IN NUMBER,
CODIUSUARIO IN NUMBER,
AGENDAMENTOFON OUT SMALLINT,
CODIESPECIALIDADE OUT NUMBER,
QTDEESPECIALIDADE OUT NUMBER,
DATAAGENDA IN OUT DATE,
HORAAGENDA IN OUT TIMESTAMP,
PERIAGENDA OUT INTEGER,
VALIAGENDA OUT DATE,
CODIPROFISSIONAL IN OUT INTEGER,
NOMEPROFISSIONAL OUT VARCHAR2,
IDAGENDAPRE OUT INTEGER
) AS
BEGIN
--SELECIONA FORMA DE AGENDAMENTO
SELECT P.AGENDAMENTOFON
INTO AGENDAMENTOFON
FROM PARAMETRO P;
--VERIFICA SE AGENDAMENTO AUTOMATICO DA AUDIO
IF (AGENDAMENTOFON = 1) THEN BEGIN
--SELECIONA DATA E HORA DISPONIVEL
SELECT AP.DATAAGENDA, AP.HORAAGENDA, AP.PERIAGENDA, AP.VALIAGENDA
INTO DATAAGENDA, HORAAGENDA, PERIAGENDA, VALIAGENDA
FROM AGENDAPRE AP
WHERE AP.IDAGENDAPRE = CODIAGENDAPRE;
--SELECIONA DADOS DA ESPECIALIDADE
CODIESPECIALIDADE := NULL;
SELECT PROFISSIONALESP.CODIESPECIALIDADE, COUNT(PROFISSIONALESP.CODIESPECIALIDADE)
INTO CODIESPECIALIDADE, QTDEESPECIALIDADE
FROM PROFISSIONALESP
INNER JOIN ESPECIALIDADE ON (PROFISSIONALESP.CODIESPECIALIDADE = ESPECIALIDADE.IDESPECIALIDADE)
INNER JOIN PROFISSIONAL ON (PROFISSIONALESP.CODIPROFISSIONAL = PROFISSIONAL.CODIPROFISSIONAL)
WHERE ESPECIALIDADE.TIPOESPECIALIDADE = 1
AND PROFISSIONAL.DISPPROFISSIONAL IN (0,1,2)
GROUP BY PROFISSIONALESP.CODIESPECIALIDADE
HAVING (COUNT(PROFISSIONALESP.CODIESPECIALIDADE)) = 1;
--VERIFICA SE QUANTIDADE IGUAL A 1
IF (QTDEESPECIALIDADE = 1) THEN BEGIN
--SELECIONA DADOS DO PROFISSIONAL
SELECT PROFISSIONALESP.CODIPROFISSIONAL, PROFISSIONAL.NOMEPROFISSIONAL
INTO CODIPROFISSIONAL, NOMEPROFISSIONAL
FROM PROFISSIONALESP
INNER JOIN PROFISSIONAL ON (PROFISSIONALESP.CODIPROFISSIONAL = PROFISSIONAL.CODIPROFISSIONAL)
WHERE PROFISSIONALESP.CODIESPECIALIDADE = CODIESPECIALIDADE;
END;
END IF;
--SELECIONA DATA E HORA DISPONIVEL
BEGIN
BEGIN
SELECT DATAAGENDAHOR, HORAAGENDAHOR
INTO DATAAGENDA, HORAAGENDA
FROM RET_VAGAAGENDAPREHOR;
END;
BEGIN
--SETA DADOS DO PROFISSIONAL
CODIPROFISSIONAL := 0;
NOMEPROFISSIONAL := NULL;
CODIESPECIALIDADE := 0;
HORAAGENDA := NULL;
END;
--INSERE NA AGENDA DA AUDIO
BEGIN
IDAGENDAPRE := (IDAGENDAPRE + 1);
END;
INSERT INTO AGENDAPRE (IDAGENDAPRE, CODIAGENDA, DATAAGENDA, HORAAGENDA,
TIPOAGENDA, MOTIAGENDA, CODIEMPRESA, NOMEEMPRESA, CODIFUNCIONARIO,
NOMEFUNCIONARIO, CODIFUNCIONARIOFUNCAO, NOMEFUNCIONARIOFUNCAO,
CODIMEDICO, NOMEMEDICO, CODIESPECIALIDADE, CODICIDADE, CODIPCMSO,
CODILTCAT, CODIRECFUNCAO, FILHOFUNCAO, NOMEFUNCAO, CBO_FUNCAO,
CODIMEDICOPCMSO, SITUAGENDA, SOLIAGENDA, ENTRAGENDA, PERIAGENDA,
VALIAGENDA, OBSEAGENDA, OPCIONAL, CODICONVENCAO, CODIPROCEDIMENTO,
CODIAGENDAMENTO, CODIGUIASPSADTPROC, CODIUSUARIO)
SELECT IDAGENDAPRE, 14 AS CODIAGENDA, DATAAGENDA, HORAAGENDA,
AP.TIPOAGENDA, AP.MOTIAGENDA, AP.CODIEMPRESA, AP.NOMEEMPRESA,
AP.CODIFUNCIONARIO, AP.NOMEFUNCIONARIO, AP.CODIFUNCIONARIOFUNCAO,
AP.NOMEFUNCIONARIOFUNCAO, CODIPROFISSIONAL, NOMEPROFISSIONAL,
CODIESPECIALIDADE, AP.CODICIDADE, AP.CODIPCMSO, AP.CODILTCAT,
AP.CODIRECFUNCAO, AP.FILHOFUNCAO, AP.NOMEFUNCAO, AP.CBO_FUNCAO,
AP.CODIMEDICOPCMSO, 0 AS SITUAGENDA, 4 AS SOLIAGENDA, AP.ENTRAGENDA,
PERIAGENDA, VALIAGENDA, AP.OBSEAGENDA, 14 AS OPCIONAL,
0 AS CODICONVENCAO, 0 AS CODIPROCEDIMENTO, 0 AS CODIAGENDAMENTO,
IDGUIASPSADTPROC, AP.CODIUSUARIO
FROM AGENDAPRE AP
WHERE AP.IDAGENDAPRE = CODIAGENDAPRE;
END;
END;
END IF;
END;Carregando comentários...