[ noctua @ 06.12.2006. 10:46 ] @
Pozdrav!

Juce mi se javio problem iz zone sumraka!
U pitanju je forms. Iz formsa se poziva procedura (iz paketa) koja odradi posao. Sve je radilo kako treba, skoro, godinu dana. Juce se nesto desilo (sta i sto?!?) i SAMO jedan korisnik ne moze da pozove jednu jedinu proceduru iz paketa! Sve ostalo radi kako treba (sve funkcije i procedure iz paketa, aplikacija, sve)!

Na poziv procedure javlja se greska ORA-06502 (PL/SQL: numeric or value error string). Proverio sam i ne saljem nigde NULL, nemam nikakvu konverziju, uvek se prosledjuju svi parametri koji se poklapaju sa tipom parametara u proceduri, ni jedan ne prelazi dozvoljenu duzinu, nije u pitanju ni karakter set... Cak, svi ostali korisnici rade normalno, bez ove greske...

Nemam ideju sta je i kako da resim problem...

Ideje, saveti, ista?



[ bigjatovic @ 06.12.2006. 18:59 ] @
Da li si proverio da nema apostrofa u tekstu koji unosi '?
Koji je OS na klijentkoj masini?
[ Dejan Topalovic @ 06.12.2006. 22:34 ] @
Kopiraj nam deklaraciju tu procedure i dio kôda kojim pozivas tu proceduru...
Da li si probao debugovati taj proces?
[ noctua @ 07.12.2006. 08:05 ] @
Pozdrav!

Ne koriste se nikakvi apostrofi, nema SPACEa, ne koristim nikakve nestandardne pakete...
Pokusao sam debug ali greska se javi na samom pozivu str proc. Dakle, ide linija po linija, uz put pratim sve parametre i sve je regularno i ispravno (?) i na liniji gde poziva proc, jednostavno odradi exception...
Kod je vrlo jednostavan:
tmpStatus je OUT parametar (0,1) koji samo obavestava da li je uspesna ili neuspesna akcija
tmpPoruka je OUT parametar koji vrati neki ljubazan text o obavljenom ili neobavljenom poslu (objasni tmpStatus)

Code:

DECLARE
    tmpStanjeENaloga NUMERIC := 0; 
    tmpStatus NUMERIC := 0;
    tmpPoruka VARCHAR2(1024);
    dugme NUMBER;
begin
    IF :BL_ELEKTRONSKI_NALOG.BROJ_NALOGA IS NULL THEN
           -- ALERT o tome kako ne moze da zatvori bez naziva
    ELSE
        dugme := prikazi_pitanje('zatvaranje e. naloga', 'Da li želite da zatvorite elektronski nalog?');
        IF (1 = dugme) THEN 
            -- Poziv procedure
                sasas.blagajna.elektrosnkiNalogClose(
                BL_ELEKTRONSKI_NALOG.BROJ_NALOGA,
                USER,
                tmpStanjeENaloga ,
                tmpStatus,
                tmpPoruka
                );
             -- ALERT o uspesnosti
        END IF;
    END IF;
end;


i u liniji sasas. jednostavno pukne i (i forms i debuger) pozove OnError... U casovima ocaja sam stavljao i BEGIN-EXEPTION na poziv, menjao sam sa to_char parametre... nista... i dalje taj (SAMO) jedan korisnik ima gresku tu. Proveravao sam bazu... Sve je regularno, i funkcionisanje i podaci....
I dalje nemam ideju...

PS. E da: OS = Win2003Srv DB = Oracle10.1.0.2.0 a Forms = 9.0.4.0.19
[ djoka_l @ 07.12.2006. 09:37 ] @
Teško je reći, ali pošto se to događa samo za jednog korisnika, a u pozivu procedure imaš parametar USER, ja bih prvo to pogledao.
[ bigjatovic @ 07.12.2006. 10:43 ] @
Za OS sam mislio na klijentsku masinu na kojoj ne radi...
1. Ukoliko je XP home moze da zeza idiotski tzv "firewall" koji zatvara portove koje forms koristi kako i kada on hoce i ne moze se nikada podesiti...
2. Problem moze da bude i u prikazi_pitanje proceduri koja podize prozor, tj ukoliko je to novi canvas i imas centriranje kanvasa, nastaje problem ukoliko nls_numeric na LOKALNOJ masini nije podesen kako treba
3. Siguran si da ulazi u granu IF (1 = dugme) THEN. Ukoliko tu ulazi obavezno prvo istrejsuj parametre poziva procedure tj USER recimo vrati u promenljivu.
Skoro nikada (sem u brzini) nisam koristio user i sysdate iz formsa, retki su problemi sa njima ali su zestoki. Uvek napises neku proceduru koja ti vrati init parametere iz baze tipa get_init(c_user,d_tsysdate, ...)
4. Ako ne resis problem posalji nam sta si "istrejsovao"

Srecno

[ Dejan Topalovic @ 07.12.2006. 11:02 ] @
Hm, ako ni sa "EXCEPTION WHEN OTHERS THEN ..." ne mozes uhvatiti gresku, onda je to neki bug. Da li si probao trejsovati na nivou servera, a ne na nivou procedure/formsa?

Da li bi nam mogao kopirati deklaraciju za rutinu sasas.blagajna.elektrosnkiNalogClose? Koje parametre prima i sta vraca nazad?
[ dusanmiloradovic @ 07.12.2006. 13:22 ] @
Zasto ne uradis 100046 trace na nivou 12 za sesiju tog korisnika, vidis lepo koje je bind variable poslao samoj bazi...
Ako koristis 10g, mozes da vidis bind variable i iz audit loga...

Pozdrav,
Dusan
[ noctua @ 07.12.2006. 14:17 ] @
Pozdrav!
Evo deteljnijih "izvestaja"
Serveri: Win2003Srv, Oracle10.1.0.2.0, Forms 9.0.4.0.19 (webforms), JInit 1.3.1.18
Klijenti: svi su XP Prof, JInit 1.3.1.18
Mreza: domen, ActiveDir. FW (hardverski) samo filtrira "izlazni" saobracaj, u okviru mreze nema nikakvih ogranicenja. Aplikacija se ne "vidi od spolja". XP-ov FW je iskljucen na svim klijentima (Inace, sve klijentske maxine su instalirane sa istog image-a i identicna su podesavanja)

Pokusavao sam da menjam parametre u pozivu ubacujuci konstante vrednosti za tog korisnika, pokusao sam sa to_char (i ostale TO_ funkcije) da konvertujem parametre, pokusao sa tmpParam1-n da zamenim parametre u proceduri a prethodno im dodelim vrednosti, pokusao sa EXCEPTION... i nista.

Sto se tice USER-a, tu u stvari ne stoji USER, nego :BL_ELEKTRONSKI_NALOG.KORISNIK_ID... uizvin'te... moja greska jer sam postovao (copy/paste) dok sam menjao parametre i probavao... svasta ocajnom pada na pamet... :\

Aplikacija je tako napisana da ne dozvoljava nikakve brljotine u nazivima (postoji "parser" koji cisti "gluposti" iz tekstualnih polja... korisnici su mi mnogoooo dovitljivi i inovativni i sve je to spreceno) i 100% nema nikakvih nedozvoljenih simbola (%, space, ', ", itd). Inace, prilikom pokretanja prve forme, vrsi se autorizacija/autentifikacija i USER se ne koristi nigde...

Uvek pukne na sam poziv procedure... Inace imam u bazi drugu proceduru koja loguje greske prilikom rada.... i u njoj uopste nema podataka o gresci i o problematicnom korisniku... Dakle, moj zakljucak je da nista ne prosledi bazi odnosno da uopste ne pozove proceduru!!!

Parametri su u obliku:
broj naloga: NALOG_BR_1, (ime_redni_broj)
korisnik id: 330033B (6_brojeva_i_slovo)
Procedura je:
Code:

 PROCEDURE elektrosnkiNalogClose  (
  inpBrojNaloga    IN BL_ELEKTRONSKI_IZVOD.BROJ_NALOGA%TYPE,
  inpKorisnik      IN BL_ELEKTRONSKI_IZVOD.NALOG_ZA_KORISNIKA%TYPE,
  outStanjeNaloga  OUT BL_ELEKTRONSKI_IZVOD.ZATVOREN%TYPE,
  outIzlaz         OUT NUMERIC,
  outText          OUT VARCHAR2
) AS
  tmpSmena NUMBER(1) := 4;-- Smena za PTT naloge je 4
  tmpIznos NUMBER;        -- Zbog poziva procedure za dokumenta
  tmpIzlaz NUMBER;        -- --------------||-----------------
  tmpText  VARCHAR2(1024);-- --------------||-----------------
  pogonDokument BL_FINANSIJSKE_PROMENE.POGON_DOKUMENTA%TYPE;
BEGIN

  -- Inicijalizacija globalnih parametara:
  MODUL_GRESKE    := 'Zatvaranje EL. naloga (elktrosnkiNalogClose)'; -- Naziv procedure (Za obradu gresaka)
  POSTOJI_SLOG    := 0; -- Trazeni slog ne postoji
  outIzlaz        := 0; -- Status akcije (0 uspesna)
  outStanjeNaloga := 1; -- Stanje naloga je zatvoren
  outText         := 'Nalog broj ' || inpBrojNaloga || ' je OBRAÐEN i ZATVOREN!'; -- Propratni text akcije
...

Ukoliko se na bilo kom mestu u proceduri desi greska, upise se njen kod, mesto greske, ko je izazvao gresku i kako je izazvao u posebnu tabelu i promeni se outIzlaz na 1 i outText na nesto tipa 'Desila se greska i nalog nije zatvoren...'

PS. Da, uvek ulazi u IF... tu nije problem...

PSS. Nasao sam solomonsko resenje: otvorio coveku novi oracle nalog, "na ruke" prebacio sve njegove podatke na taj novi nalog da bi ovaj mogao da radi (i radi!!!). Ali ostaje problem jer je originalni nalog "vezan" sa Kadrovskom... i moracu za koji dan da sredim to...
[ noctua @ 22.12.2006. 08:37 ] @
Pozdrav!

Problem je ostao n e r e s e n!
Dizem ruke...

Pisali smo metalink-u. Eskalirali problem i cekamo da vidimo sta ce strucnjaci da osmisle.

Jedino sto sam primetio da bi, mozda, moglo da prouzrokuje ovakav problem je Windows update... update se vrsi svake noci i primenjuje se na celokupnu mrezu. Normalno, kad ima nekog zvanicnog update-a. E, sad, noc pre cudnog dogadjaja je bio update...

Mislim... najverovatnije da nema nikakve veze, (a i kakve veze bi imao win sa oracle str. proc?!?) ali to je jedino sto je preostalo i sto mi pada na pamet...

Nema logike, ali nema vise ni ideje...


PS. Problem sam resio tako sto sam napravio coveku nalog, i deo njegovog posla je razdeljen njegovim kolegama... Pa, ako se pojavi nekad neko resenje, javljam...
[ Dejan Topalovic @ 22.12.2006. 09:35 ] @
Eh, taj MetaLink... I ja muku mucim sa supportom, a prosle sedmice sam im odbrusio da nisam zadovoljan njihovim radom. Od tada nisam dobio nikakav odgovor.

Vise o tome mozes naci na mom blogu...