Forum Stats

  • 3,768,631 Users
  • 2,252,824 Discussions
  • 7,874,658 Comments

Discussions

I want to insert variable values into a table

Albert Chao
Albert Chao Member Posts: 130 Green Ribbon

I have tried but not able insert the values into the summary table. Please assume all the tables are created.

Declare
tot_records number(10);
records_loaded number(10);
process_start_time timestamp;
lv_count number(10);
begin
tot_records := select count(1) into lv_count from employees;
insert into department select * from employees;
records_loaded := sql%rowcount;
process_start_time := current_timestamp;
insert into summary(total,tot_loads,start_time) values(tot_records,records_loaded,process_start_time);
end;
Tagged:

Best Answer

  • Solomon Yakobson
    Solomon Yakobson Member Posts: 18,910 Red Diamond
    Accepted Answer

    You don't assign SELECTed data to a variable via assignment statement. You use INTO clause:

    Declare
    tot_records number(10);
    records_loaded number(10);
    process_start_time timestamp;
    begin
    select count(1) into tot_records from employees;
    insert into department select * from employees;
    records_loaded := sql%rowcount;
    process_start_time := current_timestamp;
    insert into summary(total,tot_loads,start_time) values(tot_records,records_loaded,process_start_time);
    end;
    

    Also why are you inserting employee data into department table???

    SY.

Answers

  • Frank Kulash
    Frank Kulash Member, Moderator Posts: 41,210 Red Diamond

    Hi, @Albert Chao

    Please assume all the tables are created.

    No; whenever you have a question, actually post CREATE TABLE and INSERT statements for a little sample data, and the exact results you want from that data. For DML questions (such as INSERT) the results will be what the changed table looks like after the DML is completed.

  • Solomon Yakobson
    Solomon Yakobson Member Posts: 18,910 Red Diamond
    Accepted Answer

    You don't assign SELECTed data to a variable via assignment statement. You use INTO clause:

    Declare
    tot_records number(10);
    records_loaded number(10);
    process_start_time timestamp;
    begin
    select count(1) into tot_records from employees;
    insert into department select * from employees;
    records_loaded := sql%rowcount;
    process_start_time := current_timestamp;
    insert into summary(total,tot_loads,start_time) values(tot_records,records_loaded,process_start_time);
    end;
    

    Also why are you inserting employee data into department table???

    SY.

  • Frank Kulash
    Frank Kulash Member, Moderator Posts: 41,210 Red Diamond

    Hi, @Albert Chao

    tot_records := select count(1) into lv_count from employees;
    

    won't work in PL/SQL; you can't have SELECT immediately after :=.

    Do something like this instead:

    	select  count (*)
    	into 	tot_records
    	from 	employees;
    


  • mathguy
    mathguy Member Posts: 10,155 Blue Diamond

    I have tried but not able insert the values into the summary table.

    In this case, the mistake was so obvious that we didn't need more information from you. But in general, if something "doesn't work", you won't get a lot of help if you just say "it doesn't work". You need to tell us exactly what is not working. Does compilation fail? (It would, in this case - with an error message pointing exactly to the place in the code where the error is.) Does the compilation succeed, but then you get an error thrown when you execute the block? Does execution go through, but you get the wrong result? Etc.

    Please keep this in mind next time you ask a question (here or on any other forum). Also, make sure to always state your database version - in many cases (even though not in your problem here), that is the key piece of information.