Solved

Insert Data using PL/SQL

Posted on 2007-12-06
7
1,451 Views
Last Modified: 2013-12-18
Why can't I insert data that I am prompted for into a table?   I'm trying to understand.  Based on research, I think this would be better coded using JAVA, but I'm just a beginner and don't know JAVA.  Is this possible in PL/SQL?  What am I doing wrong?
SET SERVEROUTPUT ON FEEDBACK OFF

DECLARE

First_Name VARCHAR2(25);

Last_Name VARCHAR2 (25);

Birth_Date DATE;

HR_Rate NUMBER(6,2);
 

BEGIN

First_Name := &Employee_First_Name;

Last_Name := &Employee_Last_Name;

Birth_Date := &Employee_DOB;

HR_Rate := &Employee_Rate;
 

EXCEPTION

     WHEN OTHERS THEN

     	  NULL;
 

BEGIN

	Insert into Emp

	(First_Name, Last_Name, Employee_DOB, HR_Rate)

	Values  

	(First_Name, Last_Name, TO_DATE(Employee_DOB, 'MM/DD/YYYY'), HR_Rate);
 

END;

    	  

END;

Open in new window

0
Comment
Question by:khall16
7 Comments
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
SET SERVEROUTPUT ON FEEDBACK OFF
DECLARE
First_Name VARCHAR2(25);
Last_Name VARCHAR2 (25);
Birth_Date DATE;
HR_Rate NUMBER(6,2);
 
BEGIN
First_Name := &Employee_First_Name;
Last_Name := &Employee_Last_Name;
Birth_Date := &Employee_DOB;
HR_Rate := &Employee_Rate;
 
EXCEPTION
     WHEN OTHERS THEN
             NULL;
 
BEGIN
      Insert into Emp
      (First_Name, Last_Name, Employee_DOB, HR_Rate)
      Values  
      (First_Name, Last_Name, Employee_DOB, HR_Rate);
 
END;
           
END;
0
 
LVL 28

Expert Comment

by:Naveen Kumar
Comment Utility
i suggest to use different variable names ( not the same names as the column names to avoid any confusion and better readability )

The attached works code perfectly for me.

thanks
SET SERVEROUTPUT ON FEEDBACK on --- first have feedback on so that you get to know what is happening

             -- once your procedure starts working, if you can put OFF instead of ON.

DECLARE

First_Name VARCHAR2(25);

Last_Name VARCHAR2 (25);

Birth_Date DATE;

HR_Rate NUMBER(6,2);

 

BEGIN

v_First_Name := '&Employee_First_Name';

v_Last_Name := '&Employee_Last_Name';

v_Birth_Date := '&Employee_DOB';

v_HR_Rate := &Employee_Rate;   -- for only varchar/char/date data types we must use quotes otherwise u 

         -- will get errors

 

      Insert into Emp

      (First_Name, Last_Name, Employee_DOB, HR_Rate)

      Values  

      (v_First_Name, v_Last_Name, v_Employee_DOB, v_HR_Rate);
 

EXCEPTION

     WHEN OTHERS THEN

    dbms_output.put_line('exception raised'||sqlcode||sqlerrm);            

END;

/

Open in new window

0
 
LVL 28

Accepted Solution

by:
Naveen Kumar earned 250 total points
Comment Utility
try this latest one...i forgot to change your variable names in my previous code snippet.

Thanks
SET SERVEROUTPUT ON FEEDBACK on --- first have feedback on so that you get to know what is happening

             -- once your procedure starts working, if you can put OFF instead of ON.

DECLARE

v_First_Name VARCHAR2(25);

v_Last_Name VARCHAR2 (25);

v_Birth_Date DATE;

v_HR_Rate NUMBER(6,2);

 

BEGIN

v_First_Name := '&Employee_First_Name';

v_Last_Name := '&Employee_Last_Name';

v_Birth_Date := '&Employee_DOB';   -- I presume you are giving in dd-mon-yyyy format

v_HR_Rate := &Employee_Rate;   -- for only varchar/char/date data types we must use quotes otherwise u 

         -- will get errors

 

      Insert into Emp

      (First_Name, Last_Name, Employee_DOB, HR_Rate)

      Values  

      (v_First_Name, v_Last_Name, v_Employee_DOB, v_HR_Rate);

 

EXCEPTION

     WHEN OTHERS THEN

    dbms_output.put_line('exception raised'||sqlcode||sqlerrm);            

END;

/

Open in new window

0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 28

Expert Comment

by:Naveen Kumar
Comment Utility
I think once your code starts working, then your code should also have a commit after the insert happens :

-- put this after your insert statement in your code
commit;

Thanks
0
 
LVL 34

Expert Comment

by:johnsone
Comment Utility
Why are you trying to use & in PL/SQL code?  I believe you would run into issues if you ran this outside of SQL*Plus.  If you are doing this entirely in SQL*Plus, I would do put the code below in a .sql script and run it.
set verify off

accept v_first_name prompt "First name "

accept v_last_name prompt "Last name "

accept v_birth_date prompt "Birth date (format MM/DD/YYYY) "

accept v_hr_rate prompt "Rate "
 

insert into emp

            (first_name, last_name, employee_dob, hr_rate)

     values ('&v_first_name', '&v_last_name', to_date('&v_birth_date', 'MM/DD/YYYY'), &v_hr_rate);

Open in new window

0
 

Author Closing Comment

by:khall16
Comment Utility
Thank you for recommending to use different variable names than the column names, for clarification.  Oh, and yes, the commit!!!  
What if I wanted the user to enter the date as mm/dd/yyyy instead of dd-mon-yyyy?  
0
 
LVL 28

Expert Comment

by:Naveen Kumar
Comment Utility
may be try something like this to enter date in a different format :

v_Birth_Date := to_date('&Employee_DOB','dd/mm/yyyy');

Thanks
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

I remember the day when someone asked me to create a user for an application developement. The user should be able to create views and materialized views and, so, I used the following syntax: (CODE) This way, I guessed, I would ensure that useā€¦
From implementing a password expiration date, to datatype conversions and file export options, these are some useful settings I've found in Jasper Server.
This video shows how to copy a database user from one database to another user DBMS_METADATA.  It also shows how to copy a user's permissions and discusses password hash differences between Oracle 10g and 11g.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now