Criar Procedure simples

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Meverton
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sáb, 15 Out 2022 1:39 am
Localização: Brasil

Olá pessoa, estou tentando criar duas procendures bem simples. So vai impultar algumas informações em duas tabelas, produto e cliente. Tentei elaborar algo, mas sempre dá erro e não consegui avançar.

Selecionar tudo

CREATE OR REPLACE PROCEDURE "cpPRODUTO"
(
vIDPRODUTO NUMBER(22),
vDESCRICAO VARCHAR2(100),
vQUANTIDADE NUMBER(22)
)
AS 
BEGIN 

INSERT INTO PRODUTOS(IDPRODUTO,DESCRICAO,QUANTIDADE) VALUE (vIDPRODUTO, vDESCRICAO, vQUANTIDADE)

END cpPRODUTO; 
Estou usando o Oracle Live .

Abaixo tabelas usadas.

Selecionar tudo

CREATE TABLE CLIENTE( 
 Idcliente int, 
 nome varchar(60), 
 dtnascimento date, 
 cpf varchar(11), 
 CONSTRAINT pk_cliente PRIMARY KEY (Idcliente) 
);

CREATE TABLE PEDIDO( 
 Idpedido int, 
 Idcliente int, 
 datapedido date,  
 vltotal decimal(10,2), 
 CONSTRAINT pk_pedido PRIMARY KEY (Idpedido), 
 CONSTRAINT fk_pedido_cliente FOREIGN KEY (Idcliente) REFERENCES CLIENTE(Idcliente) 
);

CREATE TABLE PRODUTO( 
 Idproduto int, 
 descricao varchar(100), 
 quantidade int, 
 CONSTRAINT pk_produto PRIMARY KEY (Idproduto) 
);

CREATE TABLE ITEMPEDIDO( 
 Idpedido int, 
 Nritem int, 
 valor decimal(10,2), 
 quantidade int, 
 Idproduto int, 
 CONSTRAINT pk_itempedido PRIMARY KEY (Idpedido, Nritem), 
 CONSTRAINT fk_Idpedido FOREIGN KEY (Idpedido) REFERENCES PEDIDO (Idpedido), 
 CONSTRAINT fk_itempedido_produto FOREIGN KEY (Idproduto) REFERENCES PRODUTO (Idproduto) 
);

CREATE TABLE LOG( 
 Idlog int, 
 data date, 
 descricao varchar(255), 
 CONSTRAINT pk_log PRIMARY KEY (Idlog) 
);

INSERT INTO CLIENTE VALUES (1, 'Hugo Batista', TO_DATE('05/02/1990', 'DD/MM/YYYY'), 
'51898608253');

INSERT INTO CLIENTE VALUES (2, 'José Antonio', TO_DATE('02/05/1985', 'DD/MM/YYYY'), 
'51144722241');

INSERT INTO CLIENTE VALUES (3, 'João Carlos', TO_DATE('03/05/1993', 'DD/MM/YYYY'), 
'84882273292');

INSERT INTO CLIENTE VALUES (4, 'Edivaldo Santana', TO_DATE('01/06/2000', 'DD/MM/YYYY'), 
'30609426176');

INSERT INTO CLIENTE VALUES (5, 'Cristina Oliveira', TO_DATE('16/08/1999', 'DD/MM/YYYY'), 
'56313586700');

INSERT INTO CLIENTE VALUES (6, 'Artur da Silva', TO_DATE('06/05/2001', 'DD/MM/YYYY'), 
'67491246583');

INSERT INTO CLIENTE VALUES (7, 'Adrina Domingues', TO_DATE('01/02/1972', 'DD/MM/YYYY'), 
'22044617250');

INSERT INTO PRODUTO VALUES (1, 'SAMSUNG J7 - PRIME', 10);

INSERT INTO PRODUTO VALUES (2, 'SAMSUNG J5 - PRIME', 10);

INSERT INTO PRODUTO VALUES (3, 'IPHONE X', 10);

INSERT INTO PRODUTO VALUES (4, 'MOTO G 5S', 10);

INSERT INTO PRODUTO VALUES (5, 'IPHONE 6S', 10);

INSERT INTO PEDIDO VALUES (1, 4, TO_DATE('10/03/2018', 'DD/MM/YYYY'), 1400.99);

INSERT INTO ITEMPEDIDO VALUES (1, 1, 800.99, 1, 1);

INSERT INTO ITEMPEDIDO VALUES (1, 2, 600.00, 1, 2);

INSERT INTO PEDIDO VALUES (2, 2, TO_DATE('17/03/2018', 'DD/MM/YYYY'), 1349.50);

INSERT INTO ITEMPEDIDO VALUES (2, 1, 749.50, 1, 4);

INSERT INTO ITEMPEDIDO VALUES (2, 2, 600.00, 1, 2);

INSERT INTO PEDIDO VALUES (3, 1, TO_DATE('20/03/2018', 'DD/MM/YYYY'), 2590.10);

INSERT INTO ITEMPEDIDO VALUES (3, 1, 1800.71, 1, 5);

INSERT INTO ITEMPEDIDO VALUES (3, 2, 789.39, 1, 4);

INSERT INTO PEDIDO VALUES (4, 5, TO_DATE('21/03/2018', 'DD/MM/YYYY'), 2590.10);

INSERT INTO ITEMPEDIDO VALUES (4, 1, 5099.00, 1, 3);

INSERT INTO PEDIDO VALUES (5, 7, TO_DATE('10/03/2018', 'DD/MM/YYYY'), 1800.00);

INSERT INTO ITEMPEDIDO VALUES (5, 1, 600.00, 3, 2);
Desde já muito obrigado!
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Aparentemente parece estar tudo certo... Qual o erro que está dando ?!
Meverton
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Sáb, 15 Out 2022 1:39 am
Localização: Brasil

tiago_pimenta escreveu:
Dom, 16 Out 2022 4:46 pm
Aparentemente parece estar tudo certo... Qual o erro que está dando ?!
Ola, Tiago, obrigado pela resposta.

Como citei, eu estou rodando no Oracle online, não se se lá tem alguma limitação. A procendure é criada, porém fica com o status de invalid e quanto executo a procedure para imputar novos dados nada acontece.

Será que o capo ID da tabela não está automatico não sendo necessário esse campo na procendure?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tem os seguintes erros:

Não se seta um tamanho quando é parâmetro.
Deve ser assim:

Selecionar tudo

vIDPRODUTO NUMBER,
vDESCRICAO VARCHAR2,
vQUANTIDADE NUMBER
O outro problema é:
"cpPRODUTO" é diferente de cpPRODUTO

Se você usar aspas duplas no CREATE PROCEDURE, tem que usar aspas duplas no END.
Sugiro retirar as aspas duplas do CREATE:

Selecionar tudo

CREATE OR REPLACE PROCEDURE cpPRODUTO
Esses erros estão gerando o seguinte log:

Selecionar tudo

LINE/COL  ERROR
--------- -------------------------------------------------------------
3/18      PLS-00103: Encountered the symbol "(" when expecting one of the following:     := . ) , @ % default character The symbol ":=" was substituted for "(" to continue. 
4/20      PLS-00103: Encountered the symbol "(" when expecting one of the following:     := . ) , @ % default character The symbol ":=" was substituted for "(" to continue. 
5/19      PLS-00103: Encountered the symbol "(" when expecting one of the following:     := . ) , @ % default character The symbol ":=" was substituted for "(" to continue. 
Errors: check compiler log


LINE/COL  ERROR
--------- -------------------------------------------------------------
12/5      PLS-00113: END identifier 'CPPRODUTO' must match 'cpPRODUTO' at line 1, column 12
Errors: check compiler log
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 11 visitantes