Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fvellozo

Como executar a procedure no asp

Recommended Posts

Estou com um problema urgente!!!

Criei a procedure abaixo no oracle. Só que não sei como chamá-la no asp. Preciso que ela rode no asp.

Alguém pode me ajudar urgente!!!

Muito Obrigado.

 

CREATE OR REPLACE PROCEDURE GEL.GEL7272P
 (P_PRODUTO IN NUMBER
 ,P_UF_ORIG IN VARCHAR2
 ,P_UF_DEST IN VARCHAR2
 ,P_VAL_PC IN NUMBER
 ,P_TIPO IN VARCHAR2
 ,P_REC_FORNEC IN VARCHAR2
 ,P_VAL_BASE_ST OUT NUMBER
 ,P_VAL_ST_UNIT OUT NUMBER
 ,P_VAL_DIF_ST OUT NUMBER
 )
 IS
 w_val_entr number;
 w_val_base number;
 w_val_unit number;
 w_val_dif  number;
 w_prc_marg number;
 w_cod_ncm  number;
 w_prc_ipi  number;
 w_val_ipi  number;
begin
 begin
  select nvl(cod_ncm,0) ,nvl(prc_ipi,0)
    into w_cod_ncm      ,w_prc_ipi
    from produto
   where cod_produt = p_produto;
 exception
  when no_data_found then
   w_cod_ncm := 0;
   w_prc_ipi := 0;
 end;

 if   w_cod_ncm   = 0
 then w_val_base := 0;
      w_val_unit := 0;
      w_val_dif  := 0;
 else w_prc_marg := nvl(f_retorna_mva (w_cod_ncm, p_uf_dest, p_uf_orig, 'ST'),0);
      if   w_prc_marg > 0
      then if   w_prc_ipi = 0
           then w_val_ipi := p_val_pc;
           else w_val_ipi := p_val_pc + (p_val_pc * (w_prc_ipi/100));
           end if;
           w_val_entr := (w_val_ipi * f_retorna_aliq(p_produto,p_uf_orig,p_uf_dest,p_tipo,p_rec_fornec)) / 100;
           w_val_base := w_val_ipi + ((w_val_ipi * w_prc_marg) / 100);
           w_val_unit := (w_val_base * f_retorna_aliq(p_produto,p_uf_dest,p_uf_dest,p_tipo,p_rec_fornec)) / 100;
           w_val_dif  := w_val_unit - w_val_entr;
      else w_val_base := 0;
           w_val_unit := 0;
           w_val_dif  := 0;
      end if;
 end if;

 p_val_base_st := round(w_val_base,6);
 p_val_st_unit := round(w_val_unit,6);
 p_val_dif_st  := round(w_val_dif ,6);

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo

 

CREATE PROCEDURE NomeProc @parametro1 VARCHAR(50), @parametro2 VARCHAR(10)
AS

SELECT * FROM tabela WHERE campo1 = @parametro1 AND campo2 = @parametro2;

RETURN 0

Você pode chamar a procedure criada acima NomeProc de várias maneiras; a

mais usual é :

 

<%
Set conexao = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
Set recordsetX = Server.CreateObject("ADODB.Recordset")
conexao.Open "DSNExemplo", "sa", "senhasa"
cmd.ActiveConnection = conexao
cmd.CommandText = "EXEC NomeProc '1','2'"
Set recordsetX = cmd.Execute
%>

No exemplo acima, a stored procedure está sendo executada direto com a

passagem de valores 1 para @parametro1 e 2 para @parametro2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo

 

CREATE PROCEDURE NomeProc @parametro1 VARCHAR(50), @parametro2 VARCHAR(10)
AS

SELECT * FROM tabela WHERE campo1 = @parametro1 AND campo2 = @parametro2;

RETURN 0

Você pode chamar a procedure criada acima NomeProc de várias maneiras; a

mais usual é :

 

<%
Set conexao = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
Set recordsetX = Server.CreateObject("ADODB.Recordset")
conexao.Open "DSNExemplo", "sa", "senhasa"
cmd.ActiveConnection = conexao
cmd.CommandText = "EXEC NomeProc '1','2'"
Set recordsetX = cmd.Execute
%>

No exemplo acima, a stored procedure está sendo executada direto com a

passagem de valores 1 para @parametro1 e 2 para @parametro2.

 

 

Estou buscando a procedure da seguinte forma:

sql_st = "EXECUTE GEL7272P ("&txtCodProdut&",'"&strUf&"','RJ','"&txtValBrutoUnit&"','E','S')"

Set rs_st = DDD.execute(sql_st)

 

Só que como mostrei na procedure criada acima, ela tem 6 parâmetros de entrada e 3 de saída.

Quando executo a procedure no ASP ele roda direito com os 6 parâmetros de entrada mas não sei como buscar os parâmetros de saída.

Como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se funciona

sql_st = "EXECUTE GEL7272P ("&txtCodProdut&",'"&strUf&"','RJ','"&txtValBrutoUnit&"','E','S')"
Set rs_st = DDD.execute(sql_st)
response.write rs_st(0) & "<br>" & rs_st(1) & "<br>" & rs_st(2)

se der pau tente trocar EXECUTE por EXECno sql

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se funciona

sql_st = "EXECUTE GEL7272P ("&txtCodProdut&",'"&strUf&"','RJ','"&txtValBrutoUnit&"','E','S')"
Set rs_st = DDD.execute(sql_st)
response.write rs_st(0) & "<br>" & rs_st(1) & "<br>" & rs_st(2)

se der pau tente trocar EXECUTE por EXECno sql

 

Não funcionou não... em nenhuma das 2 formas. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou atraves do obj recordset

Compartilhar este post


Link para o post
Compartilhar em outros sites

as variaveis do asp estão recebendo valores corretos? os parametros atendem a uma resposta da procedure? tentaste colocar na variavel sql_st os mesmos parametros que colocaste no sqlplus(direto, sem concatenar os parametros)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

as variaveis do asp estão recebendo valores corretos? os parametros atendem a uma resposta da procedure? tentaste colocar na variavel sql_st os mesmos parametros que colocaste no sqlplus(direto, sem concatenar os parametros)?

 

As variáveis estão traznedo os valores corretos sim. Traz o seguinte: EXECUTE GEL7272P (103789,'SP','RJ',1,'E','S').

Se eu colocar do jeito que tá no pl/sql e rodar ele me traz os valores dos parâmetros de saída. Só não consigo no asp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque o nome do schema antes, no asp

 

tem algum on error resume next na página? se tem, comente

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloque o nome do schema antes, no asp

 

tem algum on error resume next na página? se tem, comente

 

 

Coloquei o schema e nada... rsrs

Não tem on error resume next não.

Existe outra forma de buscar sem ser esta que estou fazendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

procure por stored procedure que retorna dados,

Compartilhar este post


Link para o post
Compartilhar em outros sites

criar uma stored procedure:

 

Create Procedure checa_usuario
@email varchar(100),
@saida varchar(30) output
as
IF EXISTS(Select * from usuarios where email like @email)
BEGIN
Select @saida='o email ' + @ email + ' foi encontrado'
END
ELSE
BEGIN
Insert into usuarios(email) values(@email)
Select @saida = 'Este usuario foi inserido!,' + @@identity + ' é a chave primaria do usuario'
END

o nome da STORED PROCEDURE “checa_usuario”

Logo em seguida declaramos as variáveis que irão receber parâmetros...

 

 

@email receberá os parâmetros e passará para a stored procedure.

 

@saida foi declarada como output, ou seja, receberá dados da procedure para retornar para o ASP, VB, etc...

 

Fiz um select que checa se o email existe. Se existir, retornará que o email existe. Caso contrário, ele irá inserir o e-mail e retornar uma mensagem de que foi inserido o número da chave primária deste usuário.

 

<html>
<head>
<title>Stored Procedure – Simplicidade e Facilidade</title>
</head>

<%
Stracao = request.form("acao")
Stremail = request.form("email")
If Stracao="checar" then
'Abrindo conexao com o banco de dados
Set conexao=Server.CreateObject("ADODB.Connection")
Conexao.open "Seuodbc","usuario","senha"
'setamos o COMMAND do ADO
Set cmd = Server.CreateObject(“ADODB.Command”)
'seta a conexao ativa para o objeto 
Set cmd.ActiveConnection = Conexao
'passamos o nome da stored procedure
cmd.CommandText = "checa_usuario"
'passamos o parametro de execucao do commando, 4 refere-se a procedure
cmd.CommandType = 4
cmd.Parameters.Refresh
  'a variavel declarada na procedure é passada pelo command do ADO
cmd.Parameters("@email") = Trim(Stremail)
'recebemos o valor de @saida vindo da procedure
Strsaida = cmd.Parameters.Item("@saida")
' colocamos na tela o resultado
Response.write Strsaida
'descarregamos o objeto
Set cmd=nothing
'fechamos a conexao..
Conexao.close
Set conexao=nothing
End if
%>

<body>
<form method="post" action="teste.asp">
Digite o email: <input type="text" name="email">
<input type="hidden" name="acao" value="checar">
<input type="submit" value="Verifique">
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

criar uma stored procedure:

 

Create Procedure checa_usuario
@email varchar(100),
@saida varchar(30) output
as
IF EXISTS(Select * from usuarios where email like @email)
BEGIN
Select @saida='o email ' + @ email + ' foi encontrado'
END
ELSE
BEGIN
Insert into usuarios(email) values(@email)
Select @saida = 'Este usuario foi inserido!,' + @@identity + ' é a chave primaria do usuario'
END

o nome da STORED PROCEDURE “checa_usuario”

Logo em seguida declaramos as variáveis que irão receber parâmetros...

 

 

@email receberá os parâmetros e passará para a stored procedure.

 

@saida foi declarada como output, ou seja, receberá dados da procedure para retornar para o ASP, VB, etc...

 

Fiz um select que checa se o email existe. Se existir, retornará que o email existe. Caso contrário, ele irá inserir o e-mail e retornar uma mensagem de que foi inserido o número da chave primária deste usuário.

 

<html>
<head>
<title>Stored Procedure – Simplicidade e Facilidade</title>
</head>

<%
Stracao = request.form("acao")
Stremail = request.form("email")
If Stracao="checar" then
'Abrindo conexao com o banco de dados
Set conexao=Server.CreateObject("ADODB.Connection")
Conexao.open "Seuodbc","usuario","senha"
'setamos o COMMAND do ADO
Set cmd = Server.CreateObject(“ADODB.Command”)
'seta a conexao ativa para o objeto 
Set cmd.ActiveConnection = Conexao
'passamos o nome da stored procedure
cmd.CommandText = "checa_usuario"
'passamos o parametro de execucao do commando, 4 refere-se a procedure
cmd.CommandType = 4
cmd.Parameters.Refresh
  'a variavel declarada na procedure é passada pelo command do ADO
cmd.Parameters("@email") = Trim(Stremail)
'recebemos o valor de @saida vindo da procedure
Strsaida = cmd.Parameters.Item("@saida")
' colocamos na tela o resultado
Response.write Strsaida
'descarregamos o objeto
Set cmd=nothing
'fechamos a conexao..
Conexao.close
Set conexao=nothing
End if
%>

<body>
<form method="post" action="teste.asp">
Digite o email: <input type="text" name="email">
<input type="hidden" name="acao" value="checar">
<input type="submit" value="Verifique">
</form>
</body>
</html>

 

A minha dúvida é pra retornar os parâmetros de saída pois eles não são dados que vem de um form... eles são cálculos feitos com os parâmetros de entrada da procedure e jogados nos parâmetros de saída. Eu tenho que pegar esse resultado.

 

A procedure criada é:

CREATE OR REPLACE PROCEDURE XXX

(P_PRODUTO IN NUMBER

,P_UF_ORIG IN VARCHAR2

,P_UF_DEST IN VARCHAR2

,P_VAL_PC IN NUMBER

,P_TIPO IN VARCHAR2

,P_REC_FORNEC IN VARCHAR2

,P_VAL_BASE_ST OUT NUMBER

,P_VAL_ST_UNIT OUT NUMBER

,P_VAL_DIF_ST OUT NUMBER

)

IS

w_val_entr number;

w_val_base number;

w_val_unit number;

w_val_dif number;

w_prc_marg number;

w_cod_ncm number;

w_prc_ipi number;

w_val_ipi number;

begin...

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe um exemplo , k você pode usar para logica da sua SQL e exibir os dados da SP

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe um exemplo , k você pode usar para logica da sua SQL e exibir os dados da SP

 

Fiz como no exemplo que passou mas não funcionou. Coloquei assim, veja se tem algo errado:

 

Set cmd = Server.CreateObject("ADODB.Command")

'seta a conexao ativa para o objeto

Set cmd.ActiveConnection = conn

 

'passamos o nome da stored procedure

cmd.CommandText = "COLOQUEI O NOME DA PROCEDURE"

 

'passamos o parametro de execucao do commando, 4 refere-se a procedure

cmd.CommandType = 4

cmd.Parameters.Refresh

 

'a variavel declarada na procedure é passada pelo command do ADO

cmd.Parameters("P_PRODUTO") = txtCodProdut

cmd.Parameters("P_UF_ORIG") = strUf

cmd.Parameters("P_UF_DEST") = "RJ"

cmd.Parameters("P_VAL_PC") = txtValBrutoUnit

cmd.Parameters("P_TIPO") = "E"

cmd.Parameters("P_REC_FORNEC") = "S"

 

'recebemos o valor de @saida vindo da procedure

base_st = cmd.Parameters.Item("P_VAL_BASE_ST")

icms_st = cmd.Parameters.Item("P_VAL_ST_UNIT")

dif_st = cmd.Parameters.Item("P_VAL_DIF_ST")

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele esta gerando algum erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz pelo

.Parameters.Item("@sua_variavel")

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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