Pular para o conteúdo
  • Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 1 mês atrás por Gobatti.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #81154
    Gobatti
    Participante

      Estou tentando chamar uma função usando DBMS_SQL
      mas quando esta função retorna um boolean eu não consigo
      chama-la.
      Quando chamo um função que retorna um number funciona OK,
      mas se ela retornar boolean ou varchar2 tenho problemas.

      Segue meus códigos:

      FUNCTION TESTEA(P1 IN VARCHAR2) RETURN BOOLEAN is
      BEGIN
      INSERT INTO TESTE VALUES(‘A’, 1);
      RETURN TRUE;
      EXCEPTION
      WHEN OTHERS THEN
      RETURN FALSE;
      END;

      DECLARE
      V_EXEC VARCHAR2(100);
      V_CURSOR_ID INTEGER;
      V_RETORNO INTEGER;
      V_RET BOOLEAN;
      BEGIN
      V_EXEC := ‘BEGIN :RETORNO := ‘ || ‘PKG_TESTE.TESTEA ( :B1 ); END;’;

      V_CURSOR_ID := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(V_CURSOR_ID, V_EXEC, DBMS_SQL.NATIVE);

      DBMS_SQL.bind_variable(V_CURSOR_ID, ‘:B1’ , ”);
      DBMS_SQL.bind_variable(V_CURSOR_ID, ‘:RETORNO’, V_RET);

      V_RETORNO := DBMS_SQL.EXECUTE(V_CURSOR_ID);
      DBMS_SQL.CLOSE_CURSOR(V_CURSOR_ID);

      EXCEPTION
      WHEN OTHERS THEN
      DBMS_SQL.CLOSE_CURSOR(V_CURSOR_ID);
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      END;

      #81156
      Ishii
      Participante

        Gobatti,

        Infelzimente a dbms_sql não trata resultados booleanos mesmo…você teria que tratar o resultado e somente então retornar na sua função um booleano…

        []s Ishii

        #81158
        Gobatti
        Participante

          Ishii,

          Obrigado, vou trocar o retorno da minha função para 0 ou 1.

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.