ORA-06550: line 90, column 26: PLS-00103: Encountered the symbol "LIKE" when expecting one of the following: := . ( # % ; indicator - ora-06550

BEGIN
IF :P32_COMPANY_ID := 'OMP' THEN
INSERT INTO "V-EMPLOYEE_MASTER"
(EMPLOYEE_ID,
EMPLOYEE_NAME,
EMPLOYEE_EMAIL,
EMPLOYEE_NUMBER,
EMPLOYEE_DESIGNATION,
EMPLOYEE_SKILL,
EMPLOYEE_EXPERIANCE,
EMPLOYEE_SALARY,
COMPANY_ID,
CREATION_DATE,
CREATED_BY,
UPDATION_DATE,
UPDATED_BY)
VALUES('O'||SEQ_OMNE1.NEXTVAL,
:P32_EMPLOYEE_NAME,
:P32_EMPLOYEE_EMAIL,
:P32_EMPLOYEE_NUMBER,
:P32_EMPLOYEE_DESIGNATION,
:P32_EMPLOYEE_SKILL,
:P32_EMPLOYEE_EXPERIANCE,
:P32_EMPLOYEE_SALARY,
:P32_COMPANY_ID,
SYSDATE,
:APP_USER,
SYSDATE,
:APP_USER);
ELSIF :P32_COMPANY_ID :='CGW' THEN
INSERT INTO "V-EMPLOYEE_MASTER"
(EMPLOYEE_ID,
EMPLOYEE_NAME,
EMPLOYEE_EMAIL,
EMPLOYEE_NUMBER,
EMPLOYEE_DESIGNATION,
EMPLOYEE_SKILL,
EMPLOYEE_EXPERIANCE,
EMPLOYEE_SALARY,
COMPANY_ID,
CREATION_DATE,
CREATED_BY,
UPDATION_DATE,
UPDATED_BY)
VALUES('C'||SEQ_COG.NEXTVAL,
:P32_EMPLOYEE_NAME,
:P32_EMPLOYEE_EMAIL,
:P32_EMPLOYEE_NUMBER,
:P32_EMPLOYEE_DESIGNATION,
:P32_EMPLOYEE_SKILL,
:P32_EMPLOYEE_EXPERIANCE,
:P32_EMPLOYEE_SALARY,
:P32_COMPANY_ID,
SYSDATE,
:APP_USER,
SYSDATE,
:APP_USER);
ELSIF :P32_COMPANY_ID :='AME' THEN
INSERT INTO "V-EMPLOYEE_MASTER"
(EMPLOYEE_ID,
EMPLOYEE_NAME,
EMPLOYEE_EMAIL,
EMPLOYEE_NUMBER,
EMPLOYEE_DESIGNATION,
EMPLOYEE_SKILL,
EMPLOYEE_EXPERIANCE,
EMPLOYEE_SALARY,
COMPANY_ID,
CREATION_DATE,
CREATED_BY,
UPDATION_DATE,
UPDATED_BY)
VALUES('A'||SEQ_ATO.NEXTVAL,
:P32_EMPLOYEE_NAME,
:P32_EMPLOYEE_EMAIL,
:P32_EMPLOYEE_NUMBER,
:P32_EMPLOYEE_DESIGNATION,
:P32_EMPLOYEE_SKILL,
:P32_EMPLOYEE_EXPERIANCE,
:P32_EMPLOYEE_SALARY,
:P32_COMPANY_ID,
SYSDATE,
:APP_USER,
SYSDATE,
:APP_USER);
ELSE :P32_COMPANY_ID :='DXS' THEN
INSERT INTO "V-EMPLOYEE_MASTER"
(EMPLOYEE_ID,
EMPLOYEE_NAME,
EMPLOYEE_EMAIL,
EMPLOYEE_NUMBER,
EMPLOYEE_DESIGNATION,
EMPLOYEE_SKILL,
EMPLOYEE_EXPERIANCE,
EMPLOYEE_SALARY,
COMPANY_ID,
CREATION_DATE,
CREATED_BY,
UPDATION_DATE,
UPDATED_BY)
VALUES('D'||SEQ_DX.NEXTVAL,
:P32_EMPLOYEE_NAME,
:P32_EMPLOYEE_EMAIL,
:P32_EMPLOYEE_NUMBER,
:P32_EMPLOYEE_SKILL,
:P32_EMPLOYEE_DESIGNATION,
:P32_EMPLOYEE_EXPERIANCE,
:P32_EMPLOYEE_SALARY,
:P32_COMPANY_ID,
SYSDATE,
:APP_USER,
SYSDATE,
:APP_USER);
END IF;
END;

Related

How to run multiple insert statements in a transaction in postgresql?

BEGIN;
DECLARE o_id int;
DECLARE p_id int;
INSERT INTO properties (address, created_at, updated_at)
VALUES ('100 street, city, country, 1b1 b1b', current_timestamp, current_timestamp);
INSERT INTO ownerships (share, created_at, updated_at)
VALUES (1, current_timestamp, current_timestamp)
RETURNING id INTO o_id;
INSERT INTO profiles (first_name, last_name, created_at, updated_at)
values ('j', 'p', current_timestamp, current_timestamp)
RETURNING id INTO p_id;
INSERT INTO profile_ownerships (profile_id, ownership_id, created_at, updated_at)
VALUES (o_id, p_id, current_timestamp, current_timestamp);
COMMIT;
I'm trying to run these insert rows into properties, profiles, and ownerships. Then return the profile and ownership id's for the joining table, profile_ownerships. The above sql is returning an error around 'returning id into ownership_id;' and I'm not sure why.
This turned out to be what I was looking for. Still not sure why it needed to be wrapped in a DO .. END block, though. So if someone has an answer to that, I'd appreciate it.
DO $$
DECLARE
o_id INTEGER;
p_id INTEGER;
BEGIN
INSERT INTO properties (address, created_at, updated_at)
VALUES ('test 7', current_timestamp, current_timestamp);
INSERT INTO ownerships (shares, created_at, updated_at)
VALUES (4, current_timestamp, current_timestamp)
RETURNING id INTO o_id;
INSERT INTO profiles (first_name, last_name, created_at, updated_at)
VALUES ('p', 'j', current_timestamp, current_timestamp)
RETURNING id INTO p_id;
INSERT INTO profile_ownerships (profile_id, ownership_id, created_at, updated_at)
VALUES (p_id, o_id, current_timestamp, current_timestamp);
END $$;

sql oracle top 3 visited countries query from multiple tables

I designed a ticket booking system for flights. After I made some inserts, I want to write a query to show top 3 visited countries.
This is what I wrote:
select * from ( select flightnumber, count(*) as NumberOfFlights from ticket group by flightnumber order by NumberOfFlights desc) where rownum < 4;
My question is how to select Country column from Airport table such that to the current query result columns "FlightNumber" and "NumberOfFlights" to add "Country" name which corresponds to FlightNumber.
One example:
Airport table
insert into airport(icao_code, name, city, country) values ('PJAN', 'IS Airport', 'Iasi', 'Romania');
insert into airport(icao_code, name, city, country) values ('SBJN', 'SB Airport', 'Sibiu', 'Romania');
insert into airport(icao_code, name, city, country) values ('TMAN', 'TM Airport', 'Timisoara', 'Romania');
insert into airport(icao_code, name, city, country) values ('CJAN', 'CJ Airport', 'Cluj', 'Romania');
insert into airport(icao_code, name, city, country) values ('TKAN', 'TK Airport', 'Cluj', 'Turkey');
insert into airport(icao_code, name, city, country) values ('UKAN', 'UK Airport', 'London', 'UK');
insert into airport(icao_code, name, city, country) values ('ITAN', 'IT Airport', 'Roma', 'Italy');
insert into airport(icao_code, name, city, country) values ('SPAN', 'SP Airport', 'Madrid', 'Spain');
insert into airport(icao_code, name, city, country) values ('FRAN', 'FR Airport', 'Paris', 'France');
insert into airport(icao_code, name, city, country) values ('DEAN', 'DE Airport', 'Berlin', 'Germany');
insert into airport(icao_code, name, city, country) values ('GRAN', 'GR Airport', 'Athens', 'Greek');
Flight Table
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(1,to_date('2022/11/01 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/11/01 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 1200,'PJAN', 'GRAN',500,231);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(2,to_date('2022/02/15 08:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/02/16 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 1200,'SBJN', 'GRAN',500,232);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(3,to_date('2022/10/01 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/10/02 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 1200,'GRAN', 'CJAN',400,232);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(4,to_date('2022/09/01 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/09/02 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 1200,'GRAN', 'TMAN',700,152);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(5,to_date('2022/08/01 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/08/02 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 1200,'PJAN', 'GRAN',600,231);
--Paris-Berlin/Berlin-Paris
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(6,to_date('2022/05/06 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/05/06 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 800,'FRAN', 'DEAN',300,152);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(7,to_date('2022/05/07 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/05/07 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 800,'DEAN', 'FRAN',300,152);
-- Spain-Turkey/Turkey-Spain
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(8,to_date('2022/05/07 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/05/09 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 4000,'SPAN', 'TKAN',800,112);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(9,to_date('2022/05/08 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/05/10 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 4000,'SPAN', 'TKAN',800,112);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(10,to_date('2022/05/17 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/05/19 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 4000,'TKAN', 'SPAN',800,112);
insert into flight(flightnumber,departuretime,arrivaltime,distanceinkm,airportid_departure, airportid_arrival,numberofseats,airline_id) values
(11,to_date('2022/05/18 09:00:00', 'YYYY/MM/DD HH:MI:SS'), to_date('2022/05/20 12:00:00', 'YYYY/MM/DD HH:MI:SS'), 4000,'TKAN', 'SPAN',800,112);
Ticket table
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(1,200,'1232sde2asmd',7,37);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(2,210,'1232sde2asnd',7,36);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(3,250,'1232sde2astd',7,35);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(4,270,'1232sde2as2d',7,34);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(5,280,'1232sde2as0d',4,33);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(6,300,'1232sde2as9d',4,32);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(7,100,'1232sdv2as3d',4,31);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(8,200,'1232vde2as4d',1,30);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(9,120,'1252sde2as3d',2,29);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(10,290,'1232sde2ax3d',3,28);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(11,50,'1232sdy2as3d',3,27);
insert into ticket(ticketnumber, price, confirmationcode, flightnumber, passengerid) values
(12,90,'1232sae2as3d',6,26);
In the Ticket table I inserted 4 flights to France, 3 flights to Greece and another 2 to Greece (my mistake). It should be another Country.
So my query gives me:
FlightNumber NumberOfFlights
7 4
4 3
3 2
I want a result like that:
FlightNumber Country NumberOfFlights
7 France 4
4 Greece 3
3 Greece(mistake,some random country) 2
You need to join the tables together, then group by the country.
On Oracle 12c you can even use the newer offset syntax, and this will work in SQL Server also.
select
a.country,
count(*) as NumberOfTickets
from ticket as t
join flight as f on f.flightnumber = t.flightnumber
join airport as a on a.icao_code = f.airportid_arrival
group by
a.country
order by
NumberOfFlights desc
offset 0 rows fetch next 3 rows only;
If you wanted to get the top three flights, you could add flightnumber to the group by
select
t.flightnumber,
a.country,
count(*) as NumberOfTickets
from ticket as t
join flight as f on f.flightnumber = t.flightnumber
join airport as a on a.icao_code = f.airportid_arrival
group by
t.flightnumber,
a.country
order by
NumberOfFlights desc
offset 0 rows fetch next 3 rows only;
db<>fiddle
Maybe using oracle rank function. Something like this for oracle 11g:
select *
from (select country, flightCnt, dense_rank () over( order by flightCnt) as rnk
from (select a.country, count(f.flightNumber) as flightCnt
from ticket t, flight f, airport a
where t.flightNumber = f.flightNumber
and f.airportId_arrival = a.icao_code
group by a.country)
)
where rnk < 4
;

ORA-00907: missing right parenthesis error in oracle of a sql commandd

I tried plenty changes but still i get the same error - ORA-00907: missing right parenthesis
Insert into EMPLOYEES_14
(employee_id,
first_name,
last_name,
email,
phone_number,
hire_date,
job_id,
salary,
commission_pct,
manager_id,
department_id,
dn)
Values
('101',
hazel,
page,
hazel#gmail.com,
'123456789',
to_date ('2019-01-01 08 00 00' 'YYYY-MM-DD HH-MM-SS '),
hr101,
'10201.00',
'20.00' ,
'123456' ,
'1001' ,
hazel is a good intern )
;
The following is missing a comma:
to_date ('2019-01-01 08 00 00' 'YYYY-MM-DD HH-MM-SS '),
it should read:
to_date ('2019-01-01 08 00 00' , 'YYYY-MM-DD HH-MM-SS'),
(and I don't believe you need the trailing space after SS either)
and you need quotes for all the string literals
Insert into EMPLOYEES_14
(employee_id,
first_name,
last_name,
email,
phone_number,
hire_date,
job_id,
salary,
commission_pct,
manager_id,
department_id,
dn)
Values
(101,
'hazel',
'page',
'hazel#gmail.com',
'123456789', -- assume this is a string
to_date ('2019-01-01 08 00 00', 'YYYY-MM-DD HH-MM-SS'),
'hr101',
10201.00,
20.00 ,
123456 ,
1001 ,
'hazel is a good intern')
;
You should introduce date/time constants using the date or timestamp keyword. The other problems are missing single quotes:
Values ('101', 'hazel', 'page', 'hazel#gmail.com', '123456789',
timestamp '2019-01-01 08:00:00',
'hr101',
'10201.00', '20.00', '123456', '1001',
'hazel is a good intern'
)
Note that number values should not use single quotes. So if values such as 10201.00 are really numbers, drop the single quotes:
Values (101, 'hazel', 'page', 'hazel#gmail.com', 123456789,
timestamp '2019-01-01 08:00:00',
'hr101',
10201.00, 20.00, 123456, 1001,
'hazel is a good intern'
)

SQL - ORA-00911 - Invalid Character while trying to insert records

Oracle Live SQL.
I am trying to insert records for a table. The table goes through just fine but in each line of records, I am apparently entering some invalid characters. Of course, this is an extremely vague error. I don't know what's wrong.
I've tried changing the date values, tried removing values individually, but no matter what I get the same error.
CREATE TABLE Employee_Information (
employee varchar2(25) NOT NULL,
Address varchar2(50) NOT NULL,
Phone_number CHAR(10) NOT NULL,
Hire_date date,
Position varchar2(20),
Sales_Numbers varchar2(4),
Salary varchar2(6),
PRIMARY KEY(employee)
);
INSERT INTO Employee_Information (employee, address, phone_number,
hire_date, position, sales_numbers, salary)
VALUES (‘John Smith’, ‘123 1st street’, 5554622919, '2017-11-25', ‘assistant manager’, null, 55000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES (‘Bob Goldman’, ‘321 2nd street’, 5553392454, '2018-12-13', ‘cashier’, 345, 38000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES (‘Harry Wilson’, ‘222 3rd street’, 5553457777, '2018-01-10', ‘cashier’, 401, 42000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES (‘Sarah Adams’, ‘333 4th street’, 5555677654, '2019-03-15', ‘cashier’, 316, 36000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES (‘Alison Johnson’, ‘777 5th street’, 5559091111, '2017-11-01', ‘manager’, null, 60000);
ORA-00911 for every line of insertion.
try this: (date column you need to convert it to date and use ' chars instead of ‘ and ’)
INSERT INTO Employee_Information (employee, address, phone_number,
hire_date, position, sales_numbers, salary)
VALUES ('John Smith', '123 1st street', 5554622919, to_date('2017-11-25','yyyy-mm-dd') , 'assistant manager', null, 55000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES ('Bob Goldman', '321 2nd street', 5553392454, to_date('2018-12-13','yyyy-mm-dd'), 'cashier', 345, 38000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES ('Harry Wilson', '222 3rd street', 5553457777, to_date('2018-01-10','yyyy-mm-dd'), 'cashier', 401, 42000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES ('Sarah Adams', '333 4th street', 5555677654, to_date('2019-03-15','yyyy-mm-dd'), 'cashier', 316, 36000);
INSERT INTO Employee_Information (employee, address, phone_number, hire_date, position, sales_numbers, salary)
VALUES ('Alison Johnson', '777 5th street', 5559091111, to_date('2017-11-01','yyyy-mm-dd'), 'manager', null, 60000);

Can't get manager output in SQL

Creating Department table
CREATE TABLE department
( DEPARTMENT_ID NUMBER(4) PRIMARY KEY,
DEPARTMENT_NAME VARCHAR2(20) NOT NULL UNIQUE,
ADDRESS VARCHAR2(20) NOT NULL);
Populating Department Table
INSERT INTO department VALUES(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO department VALUES(20, 'RESEARCH', 'DALLAS');
INSERT INTO department VALUES(30, 'SALES', 'CHICAGO');
INSERT INTO department VALUES(40, 'IT', 'DALLAS');
INSERT INTO department VALUES(50, 'EXECUTIVE', 'NEW YORK');
INSERT INTO department VALUES(60, 'MARKETING', 'CHICAGO');
COMMIT;
Creating Employee table
CREATE TABLE employee
( EMPLOYEE_ID NUMBER(4) PRIMARY KEY,
EMPLOYEE_NAME VARCHAR2(20) NOT NULL,
JOB VARCHAR2(50) NOT NULL,
MANAGER_ID NUMBER(4),
HIRE_DATE DATE NOT NULL,
SALARY NUMBER(9, 2) NOT NULL,
COMMISSION NUMBER(9, 2),
DEPARTMENT_ID NUMBER(4) REFERENCES department(DEPARTMENT_ID));
Populating Employee table
INSERT INTO employee
VALUES(7839, 'KING', 'PRESIDENT', NULL, '20-NOV-01', 5000, NULL, 50);
INSERT INTO employee
VALUES(7596, 'JOST', 'VICE PRESIDENT', 7839, '04-MAY-01', 4500, NULL, 50);
INSERT INTO employee
VALUES(7603, 'CLARK', 'VICE PRESIDENT', 7839, '12-JUN-01', 4000, NULL, 50);
INSERT INTO employee
VALUES(7566, 'JONES', 'PUBLIC ACCOUNTANT', 7596, '05-APR-01', 3000, NULL, 10);
INSERT INTO employee
VALUES(7886, 'STEEL', 'PUBLIC ACCOUNTANT', 7566, '08-MAR-03', 2500, NULL, 10);
INSERT INTO employee
VALUES(7610, 'WILSON', 'ANALYST', 7596, '03-DEC-01', 3000, NULL, 20);
INSERT INTO employee
VALUES(7999, 'WOLFE', 'ANALYST', 7610, '15-FEB-02', 2500, NULL, 20);
INSERT INTO employee
VALUES(7944, 'LEE', 'ANALYST', 7610, '04-SEP-06', 2400, NULL, 20);
INSERT INTO employee
VALUES(7900, 'FISHER', 'SALESMAN', 7603, '06-DEC-01', 3000, 500, 30);
INSERT INTO employee
VALUES(7921, 'JACKSON', 'SALESMAN', 7900, '25-FEB-05', 2500, 400, 30);
INSERT INTO employee
VALUES(7952, 'LANCASTER', 'SALESMAN', 7900, '06-DEC-06', 2000, 150, 30);
INSERT INTO employee
VALUES(7910, 'SMITH', 'DATABASE ADMINISTRATOR', 7596, '20-DEC-01', 2900, NULL, 40);
INSERT INTO employee
VALUES(7788, 'SCOTT', 'PROGRAMMER', 7910, '15-JAN-03', 2500, NULL, 40);
INSERT INTO employee
VALUES(7876, 'ADAMS', 'PROGRAMMER', 7910, '15-JAN-03', 2000, NULL, 40);
INSERT INTO employee
VALUES(7934, 'MILLER','PROGRAMMER', 7876, '25-JAN-02', 1000, NULL, 40);
INSERT INTO employee
VALUES(8000, 'BREWSTER', 'TBA', NULL, '22-AUG-13', 2500, NULL, NULL);
COMMIT;
QUESTION: Based on the DEPARTMENT and EMPLOYEE tables created in write a PL/SQL anonymous block that accepts an employee ID from the user input and displays 1) the employee’s name, hire date, and total pay (salary + commission), 2) his/her manager’s name, hire date, and total pay (salary + commission), 3) the name of the department where the employee works, 4) the number of employees in the department where the employee works, and 5) the sum of total pay (salary + commission) for the department where the employee works,
So far I've got the query below I am not able to get the manager's name, hire date and total pay (salary + comission) how can I do that?
ACCEPT p_1 PROMPT 'Please enter the employee id:'
DECLARE
v_input_emp_id NUMBER := &p_1;
v_emp_name employee.employee_name%TYPE;
v_dept_name department.department_name%TYPE;
v_pay employee.salary%TYPE;
v_n NUMBER;
v_output VARCHAR2(100) := 'The employee id is not in the table';
v_hiredate EMPLOYEE.HIRE_DATE%TYPE;
BEGIN
SELECT COUNT(*)
INTO v_n
FROM employee
WHERE employee_id = v_input_emp_id;
IF v_n = 0 THEN
DBMS_OUTPUT.PUT_LINE(v_input_emp_id || ' is not in the EMPLOYEE table.');
END IF;
IF v_n = 1 THEN
SELECT employee_name, salary + NVL(commission, 0),HIRE_DATE
INTO v_emp_name, v_pay, v_hiredate
FROM employee
WHERE employee_id = v_input_emp_id;
DBMS_OUTPUT.PUT_LINE('USER INPUT:');
DBMS_OUTPUT.PUT_LINE(v_input_emp_id);
DBMS_OUTPUT.PUT_LINE('----------EMPLOYEE----------');
DBMS_OUTPUT.PUT_LINE(rpad('NAME:',10,' ') || lpad(v_emp_name,15));
DBMS_OUTPUT.PUT_LINE(rpad('HIRE DATE:',10) || lpad(v_hiredate,20));
DBMS_OUTPUT.PUT_LINE('TOTAL PAY:' || lpad(TO_CHAR(ROUND(v_pay, 2),
'$9,990.00'),21));
SELECT COUNT(*)
INTO v_n
FROM employee
WHERE manager_id = v_input_emp_id;
IF v_n != 0 THEN
SELECT employee_name ,salary + NVL(commission, 0),HIRE_DATE
INTO v_emp_name , v_pay, v_hiredate
FROM employee
WHERE employee.manager_id = v_input_emp_id;
DBMS_OUTPUT.PUT_LINE('----------MANAGER----------');
DBMS_OUTPUT.PUT_LINE(rpad('NAME:',10,' ') || lpad(v_emp_name,15));
DBMS_OUTPUT.PUT_LINE(rpad('HIRE DATE:',10) || lpad(v_hiredate,20));
DBMS_OUTPUT.PUT_LINE('TOTAL PAY:' || lpad(TO_CHAR(ROUND(v_pay, 2),
'$9,990.00'),21));
END IF;
DBMS_OUTPUT.PUT_LINE('----------MANAGER----------');
DBMS_OUTPUT.PUT_LINE(rpad('NAME:',10,' ') || lpad(v_emp_name,15));
ELSE
DBMS_OUTPUT.PUT_LINE('EMPLOYEE NOT IN THE TABLE');
END IF;
END;
You should first get employees manager_id, and then query the manager.
This works for me:
SET SERVEROUTPUT ON
ACCEPT p_1 PROMPT 'Please enter the employee id:'
DECLARE
v_input_emp_id NUMBER := &p_1;
v_emp_name employee.employee_name%TYPE;
v_dept_name department.department_name%TYPE;
v_pay employee.salary%TYPE;
v_mangager_id employee.manager_id%TYPE;
v_n NUMBER;
v_output VARCHAR2(100) := 'The employee id is not in the table';
v_hiredate employee.hire_date%TYPE;
BEGIN
SELECT COUNT(*) INTO v_n FROM employee WHERE employee_id = v_input_emp_id;
IF v_n = 0 THEN
dbms_output.put_line(v_input_emp_id || ' is not in the EMPLOYEE table.');
END IF;
IF v_n = 1 THEN
SELECT employee_name
,salary + nvl(commission, 0)
,hire_date
,manager_id
INTO v_emp_name
,v_pay
,v_hiredate
,v_mangager_id
FROM employee
WHERE employee_id = v_input_emp_id;
dbms_output.put_line('USER INPUT:');
dbms_output.put_line(v_input_emp_id);
dbms_output.put_line('----------EMPLOYEE----------');
dbms_output.put_line(rpad('NAME:', 10, ' ') || lpad(v_emp_name, 15));
dbms_output.put_line(rpad('HIRE DATE:', 10) || lpad(v_hiredate, 20));
dbms_output.put_line('TOTAL PAY:' || lpad(to_char(round(v_pay, 2), '$9,990.00'), 21));
SELECT COUNT(*) INTO v_n FROM employee WHERE employee_id = v_mangager_id;
IF v_n != 0 THEN
SELECT employee_name
,salary + nvl(commission, 0)
,hire_date
INTO v_emp_name
,v_pay
,v_hiredate
FROM employee
WHERE employee.employee_id = v_mangager_id;
dbms_output.put_line('----------MANAGER----------');
dbms_output.put_line(rpad('NAME:', 10, ' ') || lpad(v_emp_name, 15));
dbms_output.put_line(rpad('HIRE DATE:', 10) || lpad(v_hiredate, 20));
dbms_output.put_line('TOTAL PAY:' || lpad(to_char(round(v_pay, 2), '$9,990.00'), 21));
END IF;
dbms_output.put_line('----------MANAGER----------');
dbms_output.put_line(rpad('NAME:', 10, ' ') || lpad(v_emp_name, 15));
ELSE
dbms_output.put_line('EMPLOYEE NOT IN THE TABLE');
END IF;
END;
/
And the result:
USER INPUT:
7610
----------EMPLOYEE----------
NAME: WILSON
HIRE DATE: 2001.12.03
TOTAL PAY: $3,000.00
----------MANAGER----------
NAME: JOST
HIRE DATE: 2001.05.04
TOTAL PAY: $4,500.00
----------MANAGER----------
NAME: JOST
PL/SQL procedure successfully completed