Portál AbcLinuxu, 18. říjen 2017 02:25

Dotaz: Vlastná funkcia v Oracle

28.6. 13:56 pv7
Vlastná funkcia v Oracle
Přečteno: 634×
Odpovědět | Admin
Nie som databázový admin ani vývojár napriek tomu potrebujem vyriešiť nasledovný problém s Oracle. Mám SQL dopyt, kde hodnoty v jednom stĺpci sa získavajú ako výsledok funkcie. Definíciu funkcie mám, aj som ju cez SQLplus definoval, ale neviem, či správne, lebo pri volaní SQL príkazu to skončí chybou akurát kvôli funkcii. Volanie samotnej funkcie taktiež nefunguje.
CREATE OR REPLACE FUNCTION fnz( ... ) RETURN VARCHAR2
     BEGIN
       ...
       RETURN ...;
     END;
     /
SQL> select object_name,procedure_name,object_type from all_procedures where object_name like '%fnz%';

OBJECT_NAME  PROCEDURE_NAME  OBJECT_TYPE
------------ --------------- -----------
fnz                           FUNCTION
SQL> call fnz('...')

ERROR at line 1:
ORA-06576: not a valid function or procedure name
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.6. 15:10 jekub
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
Odpovědět | | Sbalit | Link | Blokovat | Admin
To se mi nezdá, pokud byste funkci vyvářel jak píšete, identifikátor v selectu by byl velkými. Nepoužil jste náhodou uvozovky?

Otestujte jestli je fce validní
select object_name,object_type,status from user_objects where lower(object_name)='fnz'
Pokud ne, tak je chyba ve funkci. V tom případě jste při vytváření dostal nějaké chybové hlášení.

28.6. 15:13 jekub
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
Odpovědět | | Sbalit | Link | Blokovat | Admin
a chybí tam ...return varchar2 IS

To co píštee by neprošlo...
28.6. 15:20 jekub
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
Odpovědět | | Sbalit | Link | Blokovat | Admin
jo a k tomu call, to nebude to pravé. Pro procedury "exec", pro funkce "select (from dual)"
28.6. 19:14 pv7
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
Funkcia pri definovaní bola úspešne vytvorená (vytvorená pod SYSDBA). Objekt je validný. Vami spomínané chyby vznikli pri anonymizácii pred postnutím sem na fórum.

Keď spustím select fnz('aaa bbb') from dual; tak dostanem chyby
ERROR v riadku 1:
ORA-00900: neplatny prikaz SQL
ORA-06512: na "SYS.FNZ", line 9
ORA-06512: na line 1
Skúšal som to pod používateľom abc (má GRANT EXECUTE ANY PROCEDURE) a tiež pod SYSDBA.
28.6. 21:22 jekub
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
Není dobrý nápad*) dělat ZMĚNY ve schematu SYS (a dalších systémových). Použijte buď testovacího uživatele (pokud existuje), nebo vždy toho abc.

K chybě - nespouští se na řádku 9 dynamicky sql dotaz (exec immediate, dbms_sql)?

*) kdyby existovala systémová fce fnz, sundal byste databázi
19.7. 15:17 rich
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
a jak by databazi tou funkci/procedurou sundal?
23.8. 15:49 BigBoss
Rozbalit Rozbalit vše Re: Vlastná funkcia v Oracle
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak níže pověděl kolega, pod uživatelem SYS funkce atd možná instalujete, ale nemůžete je dávat do SYS schématu - miliarda důvodů proč ne!!! .před název funkce si dejte název jiného schématu(uživatele), kde tu funkci nainstalujte. Za tím tečku a název funkce, tedy např honza.funkce(...) to nainstaluje do schématu honza.

Pak když ji nainstalujete, dáte ji public synonymum, pokud ji chcete spouštět z jiného schématu, a k tomu grant pro daného uživatele, který to má spouštět.

Pokud bude problém, podívejte se, zda-li je funkce validní objekt a spusťte ji například ze schématu, kde jste ji nainstaloval.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.