Pro mě to vypadá, jako by
- měli byste "převést" postupy které vypočítávají každou část
STUDENT_ID
do funkcí- Proč? Protože – jak je tomu nyní – procedury musí mít parametr OUT, aby mohly vrátit to, co vypočítaly. A to není nic jiného než funkce
- předat každému z nich informace
- získejte výsledek
- zřetězit výsledné části do konečného
STUDENT_ID
hodnoty
Něco jako toto:
function f_name (par_name in varchar2) return varchar2 is
retval varchar2(20);
begin
retval := whatever code you have to find it
return retval;
end;
function f_surname (par_surname in varchar2) return varchar2 is
retval varchar2(20);
begin
retval := whatever code you have to find it
return retval;
end;
etc.
procedure student_id (par_surname in varchar2, par_name in varchar2, ...)
is
l_student_id varchar2(30);
begin
l_student_id := f_name (par_name) ||'-'||
f_surname(par_surname) ||'-'||
f_gender (par_gender) ||'-'||
...
f_state (par_state);
dbms_output.put_line('Student_ID is: ' || l_student_id);
end;
A konečně, protože všechny tyto funkce a procedury řeší stejný problém, bylo by hezké dát je všechny do balíčku .