Jump to content
Alexandre Garcia

Procedure nao compila

Recommended Posts

Boa noite,

 

             Alguém consegue me dizer porque essa procedure não copila?

 

    PROCEDURE EliminaPapel (v_COD_PAPEL PAPEL.COD_PAPEL%TYPE) AS
    DECLARE

        BEGIN
      DELETE FROM PAPEL
            WHERE cod_papel= v_COD_PAPEL and papel.cod_papel NOT IN (SELECT DISTINCT cod_papel from participacao);
    END EliminaPapel;

 

seguinte erro:

 

Erro ao iniciar na linha 1 no comando
PROCEDURE EliminaPapel (v_COD_PAPEL PAPEL.COD_PAPEL%TYPE) AS
Relatório de erro:
Comando Desconhecido

Erro ao iniciar na linha 2 no comando
DECLARE

        BEGIN
      DELETE FROM PAPEL
            WHERE cod_papel= v_COD_PAPEL and papel.cod_papel NOT IN (SELECT DISTINCT cod_papel from participacao);
    END EliminaPapel;
Relatório de erro:
ORA-06550: linha 5, coluna 21:
PL/SQL: ORA-00904: "V_COD_PAPEL": identificador inválido
ORA-06550: linha 4, coluna 7:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

 

Abrc

 

Share this post


Link to post
Share on other sites

Qual o tipo de PAPEL.COD_PAPEL ?

 

falta algo neste where

 

WHERE cod_papel= v_COD_PAPEL and papel.cod_p

 

Coloque também um IN na definição do parãmetro

 

PROCEDURE EliminaPapel (v_COD_PAPEL IN PAPEL.COD_PAPEL%TYPE) 

 

Share this post


Link to post
Share on other sites

 

 

Em 16/05/2018 at 10:31, Motta disse:

Qual o tipo de PAPEL.COD_PAPEL ?

 

--Tabela Papel

CREATE TABLE PAPEL(
    COD_PAPEL    NUMBER GENERATED BY DEFAULT AS IDENTITY,
    DESCRICAO    VARCHAR2(60)     NOT NULL,
    CONSTRAINT PK_PAPEL PRIMARY KEY (COD_PAPEL),
    CONSTRAINT U_PAPEL_01  UNIQUE (DESCRICAO)
)
;

 

--Tabela  Participacao

CREATE TABLE PARTICIPACAO(
    COD_PAPEL                  NUMBER(10, 0)    NOT NULL,
    COD_PROFISSIONAL_CINEMA    NUMBER(10, 0)    NOT NULL,
    COD_FILME                  NUMBER(10, 0)    NOT NULL,
    CONSTRAINT PK_PARTICIPACAO PRIMARY KEY (COD_PAPEL, COD_PROFISSIONAL_CINEMA, COD_FILME)
)
;

 

 

Coloquei o IN e nada...

 

Em 16/05/2018 at 10:31, Motta disse:

falta algo neste where

 

No where não sei se o senhor estava se referindo ao papel.cod_papel.

 

    PROCEDURE EliminaPapel (v_COD_PAPEL in number) AS
    DECLARE

        BEGIN
      DELETE FROM PAPEL
            WHERE papel.cod_papel = v_COD_PAPEL and papel.cod_papel NOT IN (SELECT DISTINCT cod_papel from participacao);
    END EliminaPapel;

 

Continua sem rodar....  :-(

 

 

Share this post


Link to post
Share on other sites

Resolvido.

 

CREATE OR REPLACE PROCEDURE EliminaPapel (v_COD_PAPEL in number)
AS
BEGIN
DELETE FROM PAPEL
WHERE PAPEL.COD_PAPEL = v_COD_PAPEL
and PAPEL.cod_papel NOT IN (SELECT DISTINCT cod_papel from participacao);
END EliminaPapel;

 

Obrigado Motta.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Kellison Ruan
      Acho que não fui tão claro no título, portanto irei esmiuçar melhor aqui...
       
      É o seguinte, quero saber se há algum jeito de pegar as linhas de uma coluna q está em VARCHAR com informações do tipo "4 PONTOS DE ILUMINAÇÃO", dessa informação pretendo retirar somente o número que em questão é o "4" e colocá-lo em outra coluna INTEGER. Há essa possibilidade? Detalhe, as vezes as informações não está seguindo um padrão de vim somente como "4 PONTOS DE ILUMINAÇÃO" às vezes vêm dados com mais informações númericas que precisa distinguir, por exemplo, a mim só interessa pegar números que vem antecedendo as palavras "PONTOS", "PTOS", "PTS", têm algum jeito de distinguir isso?
    • By TeixeiraRamos
      Saúde e paz para todos,
      Prezados não sei o que vem ocorrendo com a minha procedure;
       
      No phpMyAdmin, em Editar rotina, detalhes consta:
       
       
      Em "Adicionar parâmetro"
       
       
       
      BEGIN DECLARE var_data DATE; DECLARE var_dia VARCHAR(50); DECLARE contador INT DEFAULT 0; SET var_data = data_inicial; SET var_dia = DAYNAME(data_inicial); WHILE contador < intervalo DO INSERT INTO tbpdodia(data_inicio, diassemanas)VALUES (var_data, var_dia); SET contador = contador + 1; SET var_data = DATE_ADD(data_inicial, INTERVAL contador DAY); SET var_dia = DAYNAME(var_data); END WHILE; END; DELIMITER; Call adicionar_data('2020-11-29', 398);  
      Gostaria que a coluna "data_inicial" fosse preenchida com as datas de 2020-11-29 a 2021-12-31
      O resultado mostra erros.
       
      Obrigado, saude
       
       
    • By mamotinho
      Boa noite! estou com dúvidas em relação a array, eu tenho uma procedure no SQL Server e essa procedure exibe uma lista de resultados, eu gostaria de pega o valor desses resultados e lista em um array para eu comparar com outro valor que vai ser selecionado em um select , tipo abaixo:
       
      $arraySelect = $db->prepare(exec WebSite.dbo.server_value_product 2);
      $arraySelect->execute();
      $arrayExemple = $arraySelect->fetchAll();

      procedure_list = array($arrayExemple);
       
      !in_array($valorSelect, $procedure_list){
         echo 'O Valor selecionado não existe nos resultados da procedure';
      }
       
       
      alguem sabe como posso listar o resultado da procedure em array. e sabe se o valor que procuro está entre os resultados da array.
    • By AndersonVSilva
      Bom dia Pessoal,
       
      Efetuei uma busca no forum e não encontrei alguma solução para meu problema.
       
      Tenho este form via HTML:
       
      <td><form id="form1" action="CallProc02.php" method="post"><input type="hidden" name="id" value="1" /></form></td> <td><input form="form1" type="text" name="DDDA" value="Ex: 75" /></td> <td><input form="form1" type="text" name="NumA" value="Ex: 982825441" /></td> <td><input form="form1" type="text" name="DtInit" value="Ex: 2018-01-01" /></td> <td><input form="form1" type="text" name="DtEnd" value="Ex: 2019-01-01" /></td> <td><input form="form1" type="submit" value="Enviar" /></td> E aqui está o código PHP:
      <?php $sDDDA = $_POST['DDDA']; $sNumA = $_POST['NumA']; $sDtInit = $_POST['DtInit']; $sDtEnd = $_POST['DtEnd']; $con = new PDO("mysql:host:IP;dbname=DB", "User", "Pass"); $stmt = $con->prepare("CALL NOC_cobranca_conecta_historico_msisdn(:qDDDA, :qNumA, :qDtInit, :qDtEnd) "); $stmt->bindParam(":qDDDA", $sDDDA, PDO::PARAM_STR, 3); $stmt->bindParam(":qNumA", $sNumA, PDO::PARAM_STR, 10); $stmt->bindParam(":qDtInit", $sDtInit, PDO::PARAM_STR, 12); $stmt->bindParam(":qDtEnd", $sDtEnd, PDO::PARAM_STR, 12); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($result) { echo "OK"; } else { echo "NOK - Report Development Team"; } ?> No Apache ele fica logando o erro ' PHP Notice:  Undefined index: NumA in /var/www/html/Consulta/CallProc02.php' .
       
      Alguém pode me dizer oque estou fazendo errado?
       
      Obrigado desde já pela ajuda.
    • By Edilson Chaves
      Ola amigos, uso curso a algum tempo, só que desta vez estou apanhando de algo que aparentemente e bem simples. Tenho certeza que estou esquecendo algum detalhe.
      To a 2 dias me debatendo com isto.
      Por isto estou pedindo ajuda.
       
      O que pretendo fazer e criar um novo registro que mostre a evoluçao do crecimento mensal projetando o ponto de equilibrio. Para isto eu preciso pegar a soma do mês anterior e acrescentar a soma do atual.
       
      Esta é a Procedure. Abaixo explico o quer nao esta funcionado.
       
      DROP PROCEDURE IF EXISTS sp_Monitorado;
      DELIMITER $$
          CREATE PROCEDURE sp_Monitorado()
          BEGIN
              DECLARE done INT DEFAULT FALSE;
              DECLARE vVlrMesAtuPrv, vVlrMesAntPrv, vVlrMesAtuRea, vVlrMesAntRea, vPrevisto, vRealizado numeric(10,2);
              DECLARE vAnoAtu, vMesAtu, vOrdem, vAno, vMes INT;
              DECLARE vGrupo, vSubGrupo, vPessoa, vPessoaAtu VARCHAR(100);
              DECLARE cDados CURSOR FOR SELECT Ordem, Grupo, SubGrupo, Pessoa, Ano, Mes, Previsto, Realizado FROM vwresultadomonitoramento;
              DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
              OPEN cDados;
              read_loop: LOOP
                  FETCH cDados INTO vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vRealizado;
                  IF done THEN
                     LEAVE read_loop;
                  END IF;
                  IF vOrdem <= 4 THEN
                      SET vVlrMesAtuPrv = vVlrMesAtuPrv + vPrevisto;
                      SET vVlrMesAtuRea = vVlrMesAtuRea + vRealizado;
                  INSERT INTO zzResultado VALUES (vOrdem, vGrupo, vSubGrupo, vPessoa, vAno, vMes, vPrevisto, vVlrMesAtuPrv);
                  END IF;
                  IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
                  END IF;
              END LOOP read_loop;
              CLOSE cDados;
          END;
      $$ DELIMITER;
       
      Quando co cursor entra nesta condiçao abaixo ele deveria pegar o valor acumulado anterior e acrescentar as variaveis (vVlrMesAntPrv, vVlrMesAntRea). So que o valor se perde e fica tudo zerado.
      Alguém pode me dizer onde estou errando.
      Anexo tem um print do resultado que pretendo ter
       
       IF vOrdem = 4 THEN
                      SET vVlrMesAntPrv = vVlrMesAntPrv + vVlrMesAtuPrv;
                      SET vVlrMesAntRea = vVlrMesAntRea + vVlrMesAtuRea;
                      INSERT INTO zzResultado VALUES (99, vGrupo, 'PONTO DE EQUILIBRIO', vPessoa, vAno, vMes, vVlrMesAntPrv, vVlrMesAntRea);
                      SET vVlrMesAtuPrv = 0;
                      SET vVlrMesAtuPrv = 0;
      END IF;
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.