Dúvidas de SQLServer para Oracle

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
jakefrog
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 09 Out 2007 10:55 am
Localização: Rio de Janeiro - RJ

Eu tenho q montar um Script de oracle para criar as tabelas e dpois inserir dados. o primeiro ta pronto, mas no segundo estou tendo dificuldades pois sou novato em oracle. primeira pergunta:

VARIABLE I INTEGER;
SET I = (SELECT MAX(CHAVE) FROM CIDADE);

INSERT INTO SGIPA_CATEGORIA (OBJREF,NOME,CONSTANTE,WFK_USUINCL,WFK_DTAINCL)
VALUES (I,'Categoria','Categoria',null,null);


Ele não aceita de colocar o I lá. Eu já pesquisei na net mas não achei nenhuma resposta q me ajudasse.
Dá o erro: ORA-00984: coluna não permitida aqui
A única opção seria colocar o select ali n o lugar do I dentro do insert? não queria fazer para não ficar lento!

E também não posso fazer por Procedure, tem q ser Script mesmo! Alguém saberia como eu faço isso?

Segunda pergunta, como q eu faço pra mostrar o valor de I como se fosse num select? No sql server seria
Select I; e pronto. como q faço isso no oracle? vlw! :D

E desculpe pelas perguntas de noob! :oops: :oops: :oops:

obs.: acabei de pensar em algo, a solução então seria nesse Script eu criar uma procedure, roda-la e dpois dropa-la? tudo nesse script?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

No Oracle, o correto seria criar uma SEQUENCE e, na tua tabela, criar uma TRIGGER chamando esta SEQUENCE para popular o valor novo da coluna.

Mas, com exemplo no teu script do SQL Server, no Oracle ficaria mais ou menos assim:

Selecionar tudo

DECLARE 
  i NUMBER;
BEGIN
  
		-- Popula variável
		SELECT MAX(CHAVE) 
    INTO i
			FROM CIDADE;
		
		-- Utiliza variável no insert 
		
		INSERT INTO SGIPA_CATEGORIA (OBJREF,NOME,CONSTANTE,WFK_USUINCL,WFK_DTAINCL) 
		VALUES (i,'Categoria','Categoria',null,null);			 

EXCEPTION
 WHEN OTHERS THEN 
	   raise_application_error( -20001, 'Erro populando tabela: ' || SQLERRM );		
END;
jakefrog
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 09 Out 2007 10:55 am
Localização: Rio de Janeiro - RJ

Vlw mano! funcionou aqui rlx! :D :D :D
Responder
  • Informação