Jump to content
MarKteus

ERRO NO SCRIPT DE DEPUARAÇÃO GERADO

Recommended Posts

Para depurar uma proc o Sql Developer gerou o codigo abaixo, porém ao executar acontece o seguinte erro a ser executado:
Relatório de erros -
ORA-06550: linha 32, coluna 20:
PLS-00382: a expressão é do tipo incorreto
ORA-06550: linha 32, coluna 3:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:

1-  DECLARE

2-   P_ACAO CHAR(200);
3-   P_ID NUMBER;
4-   P_ID_USUARIO NUMBER;
5-   P_LOGIN VARCHAR2(8);
6-   P_SENHA VARCHAR2(8);
7-   P_SENHAALTERNATIVA VARCHAR2(8);
8-   P_DATACADASTRO DATE;
9-   P_RETORNO LOCAL.PK_PROVA_SF.CURSOR_RETORNO;
10- BEGIN
11-   P_ACAO := 'S';
12-   P_ID := NULL;
13-   P_ID_USUARIO := NULL;
14-   P_LOGIN := 'USUARIOLOGIN';
15-   P_SENHA := NULL;
16-   P_SENHAALTERNATIVA := NULL;
17-   P_DATACADASTRO := NULL;
18-
19-   PK_PROVA_SF.SP_ADMINISTRA_LOGIN(
20-     P_ACAO => P_ACAO,
21-     P_ID => P_ID,
22-     P_ID_USUARIO => P_ID_USUARIO,
23-     P_LOGIN => P_LOGIN,
24-     P_SENHA => P_SENHA,
25-     P_SENHAALTERNATIVA => P_SENHAALTERNATIVA,
26-     P_DATACADASTRO => P_DATACADASTRO,
27-     P_RETORNO => P_RETORNO
28-   );
29-   /* Legacy output: 
30-  DBMS_OUTPUT.PUT_LINE('P_RETORNO = ' || P_RETORNO);
31-  */ 
32-  P_RETORNO := P_RETORNO; --<-- Cursor
33 --rollback; 
34- END;

Share this post


Link to post
Share on other sites

A linha 32 seria

32-  P_RETORNO := P_RETORNO; --<-- Cursor

?

Share this post


Link to post
Share on other sites

Um Bloco anonimo retornando um Cursor !?

 

Ou seria só a chamada de PK_PROVA_SF.SP_ADMINISTRA_LOGIN ?

Share this post


Link to post
Share on other sites

tente

 PK_PROVA_SF.SP_ADMINISTRA_LOGIN(...
     P_RETORNO => P_RETORNO);
  loop
    fetch P_RETORNO into campo1,campo2,...
    exit when q%notfound;
    dbms_output.put_line(campo1);
    dbms_output.put_line(campo2);
  end loop;

Share this post


Link to post
Share on other sites
Relatório de erros -

ORA-01001: cursor inválido

ORA-06512: em line 32

01001. 00000 - "invalid cursor"

*Cause:

*Action:

:(

Share this post


Link to post
Share on other sites

O "q" era a variável do cursor no exemplo que tinha aqui , troque por P_RETORNO

 

P

K_PROVA_SF.SP_ADMINISTRA_LOGIN(...
     P_RETORNO => P_RETORNO);
  loop
    fetch P_RETORNO into campo1,campo2,...
    exit when P_RETORNO%notfound;
    dbms_output.put_line(campo1);
    dbms_output.put_line(campo2);
  end loop;

Share this post


Link to post
Share on other sites

Eu imaginei que fosse isso, troquei e deu o erro que enviei no post anterior

 

DECLARE
P_ACAO CHAR(200);
P_ID NUMBER;
P_ID_USUARIO NUMBER;
P_LOGIN VARCHAR2(8);
P_SENHA VARCHAR2(8);
P_SENHAALTERNATIVA VARCHAR2(8);
P_DATACADASTRO DATE;
P_RETORNO LOCAL.PK_PROVA_SF.CURSOR_RETORNO;
BEGIN
P_ACAO := 'S';
P_ID := NULL;
P_ID_USUARIO := NULL;
P_LOGIN := 'LUCENZO';
P_SENHA := NULL;
P_SENHAALTERNATIVA := NULL;
P_DATACADASTRO := NULL;
P_RETORNO := P_RETORNO;
PK_PROVA_SF.SP_ADMINISTRA_LOGIN(
P_ACAO => P_ACAO,
P_ID => P_ID,
P_ID_USUARIO => P_ID_USUARIO,
P_LOGIN => P_LOGIN,
P_SENHA => P_SENHA,
P_SENHAALTERNATIVA => P_SENHAALTERNATIVA,
P_DATACADASTRO => P_DATACADASTRO,
P_RETORNO => P_RETORNO
);
loop
fetch P_RETORNO into P_ID,P_ID_USUARIO,P_LOGIN,P_SENHA, P_SENHAALTERNATIVA, P_DATACADASTRO;
exit when P_RETORNO%notfound;
dbms_output.put_line(P_ID);
dbms_output.put_line(P_ID_USUARIO);
dbms_output.put_line(P_LOGIN);
dbms_output.put_line(P_SENHA);
dbms_output.put_line(P_SENHAALTERNATIVA);
dbms_output.put_line(P_DATACADASTRO);
end loop;
--:P_RETORNO := P_RETORNO; --<-- Cursor
--rollback;
END;

Share this post


Link to post
Share on other sites

Existia um erro no corpo do pacote em instruções internas das procedures, usei IF VAR = NULL ao invés de IF VAR IS NULL, o que impedia a execução correta do procedimento armazenado. depois de corrigido o erro não mais aconteceu,

 

Procedimento PL/SQL concluído com sucesso.

 

mas usando seu exemplo para verificar o retorno das informações não é mostrado resultado nenhum na tela que acredito ser o propósito das linhas

 

dbms_output.put_line(P_ID);
dbms_output.put_line(P_ID_USUARIO);
dbms_output.put_line(P_LOGIN);
dbms_output.put_line(P_SENHA);
dbms_output.put_line(P_SENHAALTERNATIVA);
dbms_output.put_line(P_DATACADASTRO);



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 fernandoxwiggy
      Bom dia,
      Alguém já teve que desenvolver o CIOT da empresa E-frete em C#?
       
      Estou buscando exemplos de como fazer usando o web service deles (http://dev.efrete.com.br/Services/LogonService.asmx).
      Eu acredito que preciso chamar o "login" (depois o logout) dentro desse web service, mas ele é uma interface e não estou achando um exemplo de chamar um procedimento em um web service que seja um interface.
       
      Agradeço desde já se alguém puder ajudar.
    • By User386_Denilson
      e aí pessoal, blz?
       
      Vou colocar aqui minha duvida...
      Tenho um projeto em net Core 2.2, usadon mongodb. Tenho uma collection antiga (Pessoas) que o pessoal foi alimentado com muita coisa, e agora estou organizando em pessoa fisica e pessoa juridica.
      Eu faço a busca usando o filtro por id:
      public async Task<PessoaDadosCad> GetPessoaFisica(string id) { var pessoa = await passaiMongoCollection.FindAsync(pessoa => pessoa.Id == id); var data = JsonConvert.SerializeObject(await pessoa.FirstOrDefaultAsync()); PessoaDadosCad simplifiedPerson = JsonConvert.DeserializeObject<PessoaDadosCad>(data.ToString()); return simplifiedPerson; }  
      (pessoa => pessoa.Id == id) ao executar esse comando de busca, a classe vinculada é Pessoa.
      Eu queria ver com vcs se tem como não vincular uma classe no momento da busca??
      Obrigado
    • By rdavisp
      Senhores, bom dia.
      Mais uma vez recorro a ajuda de vocês para algo que não domino ainda. Vamos lá!
      Tenho uma API que quando startada, ela sobe no seguinte endereço: http://localhost:49013/api/values. Percebi que isto é parametrizado no arquivo launchSettings.json, que está assim:
       
      {   "iisSettings": {     "windowsAuthentication": false,     "anonymousAuthentication": true,     "iisExpress": {       "applicationUrl": "http://localhost:49013/",       "sslPort": 0     }   },   "profiles":    {     "IIS Express": {       "commandName": "IISExpress",       "launchBrowser": true,       "launchUrl": "api/values",       "environmentVariables": {         "ASPNETCORE_ENVIRONMENT": "Development"       }     },     "Cliente.IG.WebAPI": {       "commandName": "Project",       "launchBrowser": true,       "launchUrl": "api/values",       "environmentVariables": {         "ASPNETCORE_ENVIRONMENT": "Development"       },       "applicationUrl": "http://localhost:49012/"     }   } }  
      No meu controller da API, tenho seguinte método dentro do namespace:
       
          [Produces("application/json")]     [Route("api/IG")]     [ApiController]     public class IGController : Controller     {         [HttpPost]         public IGResult Post([FromBody] Filtro filtro)         {             var app = new IgApplication();             return app.getInstrucoes(filtro);         }     }  
      O "IgApplication" cria uma instância da classe onde é gerado uma lista que é populada com os valores atribuídos do DAO.
       
      Quando inicializo a aplicação "A" em angular através do localhost (http://localhost:4200/). Dentro do meu arquivo environment.prod.ts tenho a chamada:
       
      export const environment = {   production: true,   url: 'http://localhost:49013/' };  
      Ela passa por esse controller e segue o fluxo e faz o que tem que ser feito. 
      Porém, eis a questão! Eu possuo a aplicação "B", que acessa a mesma API porém possui funcionalidades diferente, por isso, dentro do mesmo controller eu criei uma nova classe e um método:
       
          [Produces("application/json")]     [Route("api/Item")]     public class APIIgItemController : Controller     {         [HttpGet]         public ItensResult Post([FromBody] Itens ValorItem)         {             var app = new CRUDApplication();             return app.GetItens();         }     }  
      Como faço para quando for startar a aplicação "B", ele passe por esse método "ItensResult" ao invés "IGResult", sendo que ambas são executadas pelo localhost:4200? Ou isso eu defino na aplicação angular? Vi que é possível configurar mais de uma "applicationUrl" dentro do json. Devo considerar essa configuração?
       
      Grato a quem puder ajudar!
       
    • By Good
      Boa noite,
       
      para um sistema que é muito acessado uma página básica, mas que sempre faz conexão com banco de dados apenas para ler uma informação que já é fixada, é muito raro ter uma atualização.
       
      Então, pensando em economizar e acelerar o site, pensei nestas maneiras:
       
      1. Já uso cloudflare, e ele guarda no cachê algumas informações. Pensei em gravar as informações em TXT, e sempre usar um file_get_contents (através de uma url) para ler as informações. Será que essas informações entrarão em cachê no cloudflare e poupará mais do servidor?
      2. Então usar apenas cloudflare e puxar a informação de forma local.
      3. Manter a conexão com banco de dados a cada acesso de um usuário
       
       
      Qual das 3 opções seria mais viável para milhares de conexões diárias?
    • By jurandyneto
      Pessoal alguém pode me ajudar?
       
      A nota da prova final tá saindo errado
      #include <stdio.h> #include <stdlib.h> int main(void) { float primeiraNota, segundaNota, terceiraNota; float media, notaDaProvaFinal; printf("\n\t\tCalculo da Nota Final.\n\n"); primeiraNota = -1; while ((primeiraNota < 0) || (primeiraNota > 10)) { printf(" Primeira Nota.: "); scanf("%f", &primeiraNota); } segundaNota = -1; while ((segundaNota < 0) || (segundaNota > 10)) { printf(" Segunda Nota..: "); scanf("%f", &segundaNota); } terceiraNota = -1; while ((terceiraNota < 0) || (terceiraNota > 10)) { printf(" Terceira Nota.: "); scanf("%f", &terceiraNota); } media = (primeiraNota + segundaNota + terceiraNota) / 3; printf("\n\n\tMedia: %.2f\n\n", media); if (media >= 7) printf("\tAPROVADO!\n\n"); if(media >= 3 && media <= 6.9){ printf("\tREPROVADO - COM DIREITO A PROVA FINAL!\n"); notaDaProvaFinal = (media * 7) - 50 /3; printf("\tNota minima a ser tirada na prova final: %.1f\n\n", notaDaProvaFinal); } if (media < 4) printf("\tREPROVADO - SEM DIREITO A PROVA FINAL!\n\n"); system("pause"); return 0; }  
×

Important Information

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