Avatar billede jmarkling Nybegynder
12. april 2007 - 13:57 Der er 4 kommentarer og
1 løsning

Kode fejler i Oracle Reports

Hejsa

Har desværre fået en fejl, der ikke er til at gennemskue... Jeg er bestemt ikke Oracle ekspert og kunne derfor godt bruge en hånd.
Jeg sidder med en en Oracle Report der fejler med en besked om at After Form triggeren fejler...  jeg har så efterfølgende været inde i Oracle Reports og finde program Unit'en, for koden. Så vidt jeg umiddelbart kan se er det en gang dårlig PL/SQL kode der skal afgøre om der er flere enheder i en aktuel tabel, som hedder table_structure, hvis der er et parameter der hedder "ALL" som er sat.
For mig ser koden noget rodet og dårlig navngivet ud, har jeg ret og hvordan kan jeg evt. rette det op?

function AfterPForm return boolean is
begin
:P_STRUCTURE_ID_THIRD := :P_STRUCTURE_ID ;
IF UPPER(:P_SORTING) = 'ELEMENTS' THEN
:P_ORDER := ' ORDER BY RN,INSPECTIONDATE,CONDITIONRATING ';
ELSE
    :P_ORDER := 'ORDER BY INSPECTIONDATE,CONDITIONRATING, RN' ;
END IF;

IF UPPER(:P_STRUCTURE_ID) = 'ALL' THEN
      SELECT S.ID
        INTO :P_STRUCTURE_ID_FIRST
        FROM table_structure S
        WHERE ROWNUM = 1;
        :P_ELEMENT_ID_SECOND := ' AND VIEW_STRUCTURE_ELEMENTS.BASE_ID = VIEW_STRUCTURE_ELEMENTS.BASE_ID
                          AND VIEW_STRUCTURE_ELEMENTS.BASE_LEVEL =1';
        if UPPER(:P_ELEMENTS) = 'YES' then
            :P_STRUCTURE_ID := ' AND  BASE_ID = BASE_ID ';
        else
            :P_STRUCTURE_ID := ' AND BASE_ID = BASE_ID AND BASE_LEVEL = 2 ';
        end if;
    ELSE
        :P_ELEMENT_ID_SECOND := ' AND VIEW_STRUCTURE_ELEMENTS.BASE_ID IN (' ||:P_STRUCTURE_ID ||') ';
      :P_STRUCTURE_ID_FIRST := substr(:P_STRUCTURE_ID,1,INSTR(:P_STRUCTURE_ID,',')-1);
        IF :P_STRUCTURE_ID_FIRST IS NULL THEN
            :P_STRUCTURE_ID_FIRST := :p_structure_id;
      END IF;
        if UPPER(:P_ELEMENTS) = 'YES' then
            :P_STRUCTURE_ID := ' AND BASE_ID IN (select B.ID from BASECONSTRUCTION B ' ||
                'start with B.ID in ( '|| :P_STRUCTURE_ID ||') ' || ' connect by NOCYCLE prior B.ID = B.PARENTID ) ';
        else
            :P_STRUCTURE_ID := ' AND BASE_ID IN (' ||:P_STRUCTURE_ID ||') ';
        end if;
    END IF;
  RETURN (TRUE);
EXCEPTION
      WHEN OTHERS THEN
      RETURN (FALSE);
end;
Avatar billede holdam Nybegynder
12. april 2007 - 14:02 #1
Hvilken fejl får du?
Avatar billede jmarkling Nybegynder
12. april 2007 - 14:03 #2
After form trigger failed...
REP-771: After Form-trigger fejlede.
Avatar billede jmarkling Nybegynder
12. april 2007 - 14:09 #3
Kan man fange fejlen ved at lave noget bedre exception håndtering?
Avatar billede holdam Nybegynder
12. april 2007 - 14:20 #4
Du kan udskrive sqlcode eller sqlerrm i din exception handler. Her er lidt fra PL/SQL-manualen:

In an exception handler, you can use the built-in functions SQLCODE and SQLERRM to find out which error occurred and to get the associated error message. For internal exceptions, SQLCODE returns the number of the Oracle error. The number that SQLCODE returns is negative unless the Oracle error is no data found, in which case SQLCODE returns +100. SQLERRM returns the corresponding error message. The message begins with the Oracle error code.

...

If no exception has been raised, SQLCODE returns zero and SQLERRM returns the message: ORA-0000: normal, successful completion.
Avatar billede jmarkling Nybegynder
19. juni 2007 - 14:17 #5
Det var variablerne der var for korte, til at indholde al den info, satte længden op og så var der ingen prob.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester