Ir para conteúdo
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

 

Compartilhar este post


Link para o post
Compartilhar em outros 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) 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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....  :-(

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que erro ocorre ?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Andinho Luiz
      Boa tarde a todos,
       
      Estou tentando criar uma Procedure no MySQL e tenho esta tabela "Cliente". 
       
      CREATE TABLE IF NOT EXISTS cliente ( id_cliente INT(5) AUTO_INCREMENT PRIMARY KEY, tipo CHAR(1) NOT NULL, rSocialNome VARCHAR(20) NOT NULL, cnpjCPF VARCHAR(30) NOT NULL, ieRG VARCHAR(30), contato VARCHAR(50), email VARCHAR(30), site VARCHAR(30), dataCadastro DATE, usuario VARCHAR(30) )ENGINE=MyISAM; Tenho outra tabela que é a "Endereço"
      CREATE TABLE IF NOT EXISTS `endereco` ( `id_endereco` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, `id_cliente` INT(11) NOT NULL, `logradouro` VARCHAR(20) NOT NULL , `rua` VARCHAR(25) NOT NULL , `numero` INT(11) NOT NULL , `complemento` VARCHAR(40) , `bairro` VARCHAR(40) NOT NULL , `cidade` VARCHAR(40) NOT NULL , `estado` VARCHAR(40) NOT NULL , `cep` VARCHAR(9) NOT NULL , PRIMARY KEY (`id_endereco`), constraint fk_endereco_cliente FOREIGN KEY (id_cliente) REFERENCES cliente (id_cliente) ) ENGINE=MyISAM  
      Para fazer o insert nas duas tabelas eu criei uma procedure, podem quando tento adicionar o MySQL da erro "ALERTA: Erro ao inserir na tabela de pessoas"
       
      DELIMITER $$ CREATE DEFINER=`dotinfoc`@`localhost` PROCEDURE `cad_cliente`( IN c_tipo CHAR(1), IN c_rSocialNome VARCHAR(20), IN c_cnpjCPF VARCHAR(30), IN c_ieRG VARCHAR(30), IN c_contato VARCHAR(50), IN c_email VARCHAR(30), IN c_site VARCHAR(30), IN c_logradouro VARCHAR(20), IN c_rua VARCHAR(25), IN c_numero INT(11) , IN c_complemento VARCHAR(40) , IN c_bairro VARCHAR(40), IN c_cidade VARCHAR(40), IN c_estado VARCHAR(40), IN c_cep VARCHAR(9) ) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; START TRANSACTION; INSERT INTO cliente (tipo, rSocialNome, cnpjCPF, ieRG, contato, email, site, dataCadastro, usuario) VALUES (c_tipo, c_rSocialNome, c_cnpjCPF, c_ieRG, c_contato, c_email, c_site); IF excecao = 1 THEN SET msg = "ALERTA: Erro ao inserir na tabela de pessoas"; ROLLBACK; ELSE SELECT DISTINCT LAST_INSERT_ID() INTO @id_cliente FROM cliente; IF excecao = 1 THEN SET msg = "ALERTA: Erro ao buscar o ultimo ID inserido em clientes"; ROLLBACK; ELSE INSERT INTO endereco(id_cliente, logradouro, rua, numero, complemento, bairro, cidade, estado, cep) values(@id_cliente, c_logradouro, c_rua, c_numero, c_complemento, c_bairro, c_cidade, c_estado, c_cep); IF excecao = 1 THEN SET msg = "ALERTA: Erro ao inserir na tabela de Endereco"; ROLLBACK; END IF; END IF; END IF; IF excecao <> 1 THEN COMMIT; SET msg = "ALERTA: Registro Incluido com sucesso"; END IF; SELECT msg AS msg; END$$ DELIMITER ;  
       
    • Por josePeixoto
      Olá,
       
      quando tento executar a trigger abaixo, ele me retorna 
      Erro(56,16): PLS-00306: wrong number or types of arguments in call to '||'  
      create or replace TRIGGER API_SIM_PF_ATUALIZA_DENTALIS BEFORE INSERT OR UPDATE ON PESSOA_FISICA FOR EACH ROW DECLARE type t_num is table of number; DS_EMAIL_W t_num; TELEFONE_RES_W t_num; TELEFONE_COM_W t_num; ESTADO_CIVIL_W VARCHAR2(255); ENDERECO_RES_W t_num; NUMERO_W t_num; BAIRRO_RES_W t_num; COMPLEMENTO_RES_W t_num; CIDADE_RES_W t_num; CEP_RES_W t_num; ENDERECO_COM_W t_num; NUMERO_COM_W t_num; BAIRRO_COM_W t_num; COMPLEMENTO_COM_W t_num; CIDADE_COM_W t_num; CEP_COM_W t_num; PROFISSIONAL_W VARCHAR2(255); SEXO_W VARCHAR2(255); DT_NASCIMENTO_W t_num; BEGIN SELECT DISTINCT CP.DS_EMAIL, ('('||nr_ddd_telefone||')'||nr_telefone), ('('||nr_ddd_telefone||')'||nr_telefone), (SELECT CP1.DS_ENDERECO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.NR_ENDERECO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_BAIRRO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_COMPLEMENTO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.DS_MUNICIPIO FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), (SELECT CP1.CD_CEP FROM COMPL_PESSOA_FISICA CP1 WHERE CP1.CD_PESSOA_FISICA = :NEW.CD_PESSOA_FISICA AND CP1.IE_TIPO_COMPLEMENTO = 1), TO_CHAR(:NEW.DT_NASCIMENTO,'"YYYY-MM-DD HH24:MI:SS') BULK COLLECT INTO DS_EMAIL_W,TELEFONE_RES_W,TELEFONE_COM_W,ENDERECO_RES_W,NUMERO_W,BAIRRO_RES_W,COMPLEMENTO_RES_W,CIDADE_RES_W,CEP_RES_W,/*ENDERECO_COM_W,NUMERO_COM_W,BAIRRO_COM_W,COMPLEMENTO_COM_W, CIDADE_COM_W,CEP_COM_W,*/DT_NASCIMENTO_W FROM TASY.COMPL_PESSOA_FISICA CP WHERE CP.CD_PESSOA_FISICA =:NEW.CD_PESSOA_FISICA AND CP.IE_TIPO_COMPLEMENTO = 1; SELECT V.DS_VALOR_DOMINIO INTO ESTADO_CIVIL_W FROM VALOR_DOMINIO V WHERE CD_DOMINIO = 5 AND V.VL_DOMINIO = :NEW.IE_ESTADO_CIVIL; SELECT CA.DS_CARGO INTO PROFISSIONAL_W FROM CARGO CA WHERE CA.CD_CARGO = :NEW.CD_CARGO; SELECT V.DS_VALOR_DOMINIO INTO SEXO_W FROM VALOR_DOMINIO V WHERE CD_DOMINIO = 4 AND V.VL_DOMINIO = :NEW.IE_SEXO; BEGIN SEND_DB_REQUST_PROC ('http://628186fc.ngrok.io/DentalisIntegration-1.0.0/dentalis/createuser', '{ "nome":' || :NEW.NM_PESSOA_FISICA ||','|| '"codigo_externo":' || :NEW.CD_PESSOA_FISICA ||','|| '"codigo_plano":' || 694 ||','|| '"matricula":' || :NEW.CD_PESSOA_FISICA || ',' || '"cpf":' || :NEW.NR_CPF ||','|| '"rg":' || :NEW.NR_IDENTIDADE || ',' || '"email":' || DS_EMAIL_W || ',' || '"telefone_res":' || TELEFONE_RES_W ||','|| '"telefone_com":' || TELEFONE_COM_W || ',' || '"celular":' || :NEW.NR_TELEFONE_CELULAR || ',' || '"observacao":' || :NEW.DS_OBSERVACAO || ',' || '"estado_civil":' || ESTADO_CIVIL_W || ',' || '"profissao":' || PROFISSIONAL_W || ',' || '"sexo":' || SEXO_W || ',' || '"data_nascimento":' || DT_NASCIMENTO_W || ',' || '"endereco_res":' || ENDERECO_RES_W || ',' || '"numero_res":' || NUMERO_W || ',' || '"bairro_res":' || BAIRRO_RES_W || ',' || '"complemento_res":' || COMPLEMENTO_RES_W || ',' || '"cidade_res":' || CIDADE_RES_W || ',' || '"cep_res":' || CEP_RES_W || ',' || '"endereco_com": "",' || '"numero_com":"",' || '"bairro_com":"",' || '"complemento_com":"",' || '"cidade_com":"",' || '"cep_com":""' || '}'); exception when others then raise_application_error(-20000,'Erro: '|| sqlerrm); END; END;  
      Alguém sabe o que pode ser? 
       
      Obrigado desde já pela atenção!
    • Por Ederson Silva
      Olá.
       
      Estou tendo problemas com uma procedure na qual dentro dela existe uma função que busca informações de um XML. Quando executo esta função dentro do Studio Management ele funciona, só que se executo no reporting service ou diretamente no ERP o SQL Server retorna o erro abaixo:
       
      Falha em SELECT porque as seguintes opções SET têm configurações incorretas:
      'ARITHBORT'. Verifique se as opções SET estão corretas para uso com exibições indexadas e/ou índices em colunas computadas e/ou índices filtrados e/ou notificações de consulta e/ou métodos de tipo de XML e/ou operações de índice espacial.
       
      Tanto na procedure quanto nas functions eu setei as seguintes options:
       
      SET ANSI_NULLS ON
      SET ANSI_PADDING ON
      SET ANSI_WARNINGS ON
      SET ARITHABORT ON
      SET CONCAT_NULL_YIELDS_NULL ON
      SET NUMERIC_ROUNDABORT OFF
      SET QUOTED_IDENTIFIER ON
       
      Se alguém tiver alguma ideia de como corrigir isso por gentileza me dê uma luz.
       
      Obrigado!
    • Por bruno.291193
      Olá,
       
      Estou com a seguinte dúvida:
       
      Na criação de minha procedure, os parâmetros de Data Inicial e Final não podem vir nulos. Eu criei a verificação abaixo para isso:
      " IF @DT_INICIAL AND @DT_FINAL IS NULL BEGIN RAISERROR('ERRO = DATA INICIAL E FINAL NAO INFORMADAS.',1,1) END; "
      Porém, ao meu ver, é uma verificação desnecessária, ou seja, se eu criar os parâmetros @DT_INICIAL e @DT_FINAL como NOT NULL, o próprio SQL irá retornar o erro dizendo que o parâmetro é obrigatório.
       
      Mas, não sei como realizar a criação desses parâmetros como NOT NULL, ao realizar o código abaixo, o SQL retorna o erro (também abaixo):
      (
      DECLARE @DT_INICIAL DATE NOT NULL,
      DECLARE @DT_FINAL DATE NOT NULL
      )
      Retorno do SQL:
      Msg 11555, Level 15, State 1, Procedure PRC_MTCORP_MODU_ABAS_BOBI_QUAL_CONS, Line 29
      O parâmetro '@DATA_INICIAL' foi declarado como NOT NULL. Os parâmetros NOT NULL têm suporte apenas com procedimentos armazenados compilados de forma nativa.
       
      Pergunta:
      Existe meios de se criar o parâmetro como NOT NULL?
       
      Detalhe:
      Criando o parâmetro sem nenhuma informação, ou seja, DECLARE "@DT_INICIAL DATE", na execução o SQL aceita o parâmetro como NULL, sendo necessária minha verificação inicial.
       
      Abraço.
       
    • Por Paul Walker
      Preciso desenvolver um sistema que automatiza o atendimento a alunos feitos por coordenadores.
      Quando algum aluno chegar na secretária e pedir para ser atendido por algum coordenador, ela vai cadastrar no sistema essa solicitação de atendimento. Este aluno entrara na fila do referido coordenador.
      Então fiz duas tabelas. "Fila" que é a da secretária que vai cadastrar e a  "Coordenador" que é as informações dele.
      o que quero é passar somente as seguintes informações da fila para o coordenador:
      Nome, Curso, se já é aluno, status e data/hora.
      até agora está desse jeito, e não sei como fazer para passar essas informações automaticamente para ele, alguém pode me ajudar? Estou usando o Workbench.
       
      SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
      SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
      SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
      CREATE SCHEMA IF NOT EXISTS `at_automatizado` DEFAULT CHARACTER SET utf8 ;
      USE `at_automatizado` ;
      -- -----------------------------------------------------
      -- Table `at_automatizado`.`coordenador`
      -- -----------------------------------------------------
      CREATE TABLE IF NOT EXISTS `at_automatizado`.`coordenador` (
        `codigo` INT NOT NULL AUTO_INCREMENT,
        `login` VARCHAR(45) NULL,
        `senha` VARCHAR(45) NULL,
        `nome_coordenador` VARCHAR(100) NULL,
        `ramal` VARCHAR(9) NULL,
        `curso` VARCHAR(45) NULL,
        PRIMARY KEY (`codigo`))
      ENGINE = InnoDB;

      -- -----------------------------------------------------
      -- Table `at_automatizado`.`fila`
      -- -----------------------------------------------------
      CREATE TABLE IF NOT EXISTS `at_automatizado`.`fila` (
        `codigo` INT NOT NULL AUTO_INCREMENT,
        `coordenador_codigo` INT NOT NULL,
        `nome_coordenador` VARCHAR(100) NULL,
        `nome_aluno` VARCHAR(100) NULL,
        `telefone` VARCHAR(14) NULL,
        `curso` VARCHAR(100) NULL,
        `ja_e_aluno` ENUM('Sim', 'Não') NULL,
        `status` ENUM('Já atendido', 'Não atendido') NULL,
        `data_e_hora` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (`codigo`),
        INDEX `fk_fila_coordenador_idx` (`coordenador_codigo` ASC),
        CONSTRAINT `fk_fila_coordenador`
          FOREIGN KEY (`coordenador_codigo`)
          REFERENCES `at_automatizado`.`coordenador` (`codigo`)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION)
      ENGINE = InnoDB;

      SET SQL_MODE=@OLD_SQL_MODE;
      SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
      SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.