sp2-0552 bind error message

i have a big table and want to add other table to it. if the div and product is found the table will be updated in the appropriate row, but if they are not found a new record will be inserted in the table.

i made two cursors to do this job, but i faced these errors:

ERROR at line 3:
ORA-06550: line 3, column 59:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 3, column 22:
PL/SQL: SQL Statement ignored
ORA-06550: line 3, column 9:
PLS-00341: declaration of cursor 'MATCH_CUR' is incomplete or malformed
ORA-06550: line 7, column 12:
PL/SQL: Item ignored
ORA-06550: line 15, column 24:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 15, column 3:
PL/SQL: SQL Statement ignored

i have oracle 8i 817 and this is my code:

SQL> declare
  2   cursor form_cur is select * from GSV_R1;
  3   cursor match_cur is select * from form1_final where div= match_div AND prodGrp= match_prodGrp;
  4   form_var form_cur%rowtype;
  5   match_div form1_final.div%type;
  6   match_prodGrp form1_final.prodGrp%type;
  7   match_var match_cur%rowtype;
  8  begin
  9   open form_cur;
 10   fetch form_cur into form_var;
 11   while form_cur%found loop
 12    match_div := form_var.div;
 13    match_prodGrp := form_var.prodGrp;
 14    open match_cur;
 15    fetch match_cur into match_var;
 16    if (match_cur%notfound) then
 17     insert into form1_final(
 18      div,
 19      prodGrp,
 20      gsv_Qty_Current_Year,
 21      gsv_Qty_Previous_Year,
 22      gsv_Qty_Var,
 23      gsv_Price_Current_Year,
 24      gsv_Price_Previous_Year,
 25      gsv_Price_Var)
 26     values(form_var.Div,
 27      form_var.ProdGrp,
 28      form_var.Qty_Current_Year,
 29      form_var.Qty_Previous_Year,
 30      form_var.Qty_Var,
 31      form_var.Price_Current_Year,
 32      form_var.Price_Previous_Year,
 33      form_var.Price_Var);
 34    else
 35     update form1_final
 36     set gsv_Qty_Current_Year = form_var.Qty_Current_Year,
 37      gsv_Qty_Previous_Year = form_var.Qty_Previous_Year,
 38      gsv_Qty_Var = form_var.Qty_Var,
 39      gsv_Price_Current_Year = form_var.Price_Current_Year,
 40      gsv_Price_Previous_Year = form_var.Price_Previous_Year,
 41      gsv_Price_Var = form_var.Price_Var
 42     where div= match_div AND prodGrp=match_prodGrp;
 43    end if;
 44    close match_cur;
 45    fetch form_cur into form_var;
 46    end loop;
 47   close form_cur;
 48  end;
 49  /
 cursor match_cur is select * from form1_final where div= match_div AND prodGrp= match_prodGrp;
                                                          *
ERROR at line 3:
ORA-06550: line 3, column 59:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 3, column 22:
PL/SQL: SQL Statement ignored
ORA-06550: line 3, column 9:
PLS-00341: declaration of cursor 'MATCH_CUR' is incomplete or malformed
ORA-06550: line 7, column 12:
PL/SQL: Item ignored
ORA-06550: line 15, column 24:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 15, column 3:
PL/SQL: SQL Statement ignored

please help me !!
bassamsbdAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

bassamsbdAuthor Commented:
sorry but the title have wrong error code ........ i correct this code and forget to change the title

forgive me

regards,

Bassam
seazodiacCommented:
Hi Bassamsbd:

you are spending a lot of time reinventing the wheel...:-(

take a look at this link, you will be amazed how much time and efforts you will save:

http://otn.oracle.com/products/oracle9i/daily/apr30.html

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
andrewstCommented:
Your error is caused by the fact that your cursor references two variables that haven't been declared yet (match_div and match_prodGrp).  Rearrange to:

declare
  form_var form_cur%rowtype;
  match_div form1_final.div%type;
  match_prodGrp form1_final.prodGrp%type;
  match_var match_cur%rowtype;
  cursor form_cur is select * from GSV_R1;
  cursor match_cur is select * from form1_final where div= match_div AND prodGrp= match_prodGrp;
 
But as seazodiac says, you are doing this the hard way - and inefficiently.  If you are not on 9i and so don't have the MERGE command you can still skip the match_cur bit and simplify the code like this:

begin
 for form_var in (select * from GSV_R1) loop
   -- Try to update it
   update form1_final
   set gsv_Qty_Current_Year = form_var.Qty_Current_Year,
    gsv_Qty_Previous_Year = form_var.Qty_Previous_Year,
    gsv_Qty_Var = form_var.Qty_Var,
    gsv_Price_Current_Year = form_var.Price_Current_Year,
    gsv_Price_Previous_Year = form_var.Price_Previous_Year,
    gsv_Price_Var = form_var.Price_Var
   where div= form_var.div AND prodGrp=form_var.prodGrp;
   if sql%rowcount = 0 then
       -- No row found to update, so insert it instead
         insert into form1_final(
            div,
            prodGrp,
            gsv_Qty_Current_Year,
            gsv_Qty_Previous_Year,
            gsv_Qty_Var,
            gsv_Price_Current_Year,
            gsv_Price_Previous_Year,
            gsv_Price_Var)
         values(form_var.Div,
            form_var.ProdGrp,
            form_var.Qty_Current_Year,
            form_var.Qty_Previous_Year,
            form_var.Qty_Var,
            form_var.Price_Current_Year,
            form_var.Price_Previous_Year,
            form_var.Price_Var);
  end if;
  end loop;
end;
/
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Oracle Database

From novice to tech pro — start learning today.