php - Cursor returning too many duplicates -


i seem have problem procedure. search , gets search correctly returns me same answer many times point fatal error of exhausted memory.this code:

function pet_search(pettype in varchar2, breed in varchar2, color in varchar2, petsize in varchar2, ts in varchar2, energy in varchar2, space in varchar2)        return sys_refcursor                   pet_search_result sys_refcursor;            type_id number;           breed_id number;           color_id number;           size_id number;             ts_id number;            energy_id number;            space_id number;         begin           select tp.pet_type_code type_id        dbadmin.pettype tp        tp.pet_type_name = pettype;         select b.pet_race_code breed_id        dbadmin.petrace b        b.pet_race_name = breed;        select pc.pet_color_code color_id       dbadmin.petcolor pc       pc.pet_color = color;        select ps.pet_size_code size_id       dbadmin.petsize ps       ps.pet_size = petsize;          select ls.pet_learn_code ts_id       dbadmin.petlearningskill ls       ls.pet_learn_skill = ts;        select en.pet_energy_code energy_id        dbadmin.petenergy en        en.pet_energy_level = energy;         select sp.pet_space_code space_id        dbadmin.petspace sp        sp.pet_space = space;       open pet_search_result select pet_type_name, pet_race_name, pet_cond_name, pet_energy_level, pet_learn_skill, vet_name, person_name, petlocation, petnotes, petabandondescription, pet_space, pet_treatment, pet_color, pet_sickness_name, pet_med_name     pet, pettype, petrace, petcondition, petsize,petenergy, petlearningskill, veterinary, person, petspace, pettreatments, petcolor, petsickness, petmedicine     pettype.pet_type_code = type_id     , petrace.pet_race_code = breed_id       , pet.pet_color_code = color_id     , pet.pet_size_code = size_id       , pet.pet_learn_code = ts_id      , pet.pet_energy_code = energy_id      , pet.petspace_id = space_id;         return pet_search_result;         exception          when no_data_found            return null;       end;   end pet_search_package;  

can see mistake ? suggestions appreciated

the problem seems in select query, if clause doenst satisfy conditions rows duplicated due join. see example below states problem , how resolve it.

select pet_type_name, pet_race_name, pet_cond_name, pet_energy_level, pet_learn_skill, vet_name, person_name, petlocation, petnotes, petabandondescription, pet_space, pet_treatment, pet_color, pet_sickness_name, pet_med_name     pet, pettype, petrace, petcondition, petsize,petenergy, petlearningskill, veterinary, person, petspace, pettreatments, petcolor, petsickness, petmedicine     pettype.pet_type_code = type_id     , petrace.pet_race_code = breed_id       , pet.pet_color_code = color_id     , pet.pet_size_code = size_id       , pet.pet_learn_code = ts_id      , pet.pet_energy_code = energy_id      , pet.petspace_id = space_id; 

for example here 2 tables emp , dept,

        sql> select * emp;        empno ename      job              mgr hiredate         sal       comm     deptno  ---------- ---------- --------- ---------- --------- ---------- ---------- ----------        7369 smith      clerk           7902 17-dec-80        800                    20        7499 allen      salesman        7698 20-feb-81       1600        300         30        7521 ward       salesman        7698 22-feb-81       1250        500         30        7566 jones      manager         7839 02-apr-81       2975                    20        7654 martin     salesman        7698 28-sep-81       1250       1400         30        7698 blake      manager         7839 01-may-81       2850                    30        7782 clark      manager         7839 09-jun-81       2450                    10        7788 scott      analyst         7566 19-apr-87       3000                    20        7839 king       president            17-nov-81       5000                    10        7844 turner     salesman        7698 08-sep-81       1500          0         30        7876 adams      clerk           7788 23-may-87       1100                    20        7900 james      clerk           7698 03-dec-81        950                    30        7902 ford       analyst         7566 03-dec-81       3000                    20        7934 miller     clerk           7782 23-jan-82       1300                    10   14 rows selected.  sql> select * dept;      deptno dname          loc ---------- -------------- -------------         10 accounting     new york         20 research       dallas         30 sales          chicago         40 operations     boston 

this query return 1 row if conditions in clause satisfied.

sql> select a.empno,b.deptno,a.ename emp a,dept b a.empno=7369 , b.deptno=20;       empno     deptno ename ---------- ---------- ----------       7369         20 smith 

here return duplicates if conditions clause not matched, or less number of differntiators.

sql> select a.empno,b.deptno,a.ename emp a,dept b a.empno=7369 ;        empno     deptno ename   --------- ---------- ----------        7369         10 smith        7369         20 smith        7369         30 smith        7369         40 smith 

if have reference between these tables advisable use in clause , compare