I received this error ORA-00984 column not allowed here - oracle

Create table emo(
Emo_id number(10) NOT NULL,
Name varchar2(100) NOT NULL,
Band var char2(2),
Emp_type varchar2(5) DEFAULT "FTE" NOT NULL
);

Should be
CREATE TABLE emo
(
Emo_id NUMBER (10) NOT NULL,
Name VARCHAR2 (100) NOT NULL,
Band VARCHAR2 (2),
Emp_type VARCHAR2 (5) DEFAULT 'FTE' NOT NULL
);
So:
not double but single quotes for column's default value
not var char2 but varchar2

Related

Written the below command in oracle sql and getting the error ORA-00907: missing right parenthesis how to fix this?

create table EMPLOYEES
(
EMPLOYEE_ID NUMBER(6) PRIMARY KEY,
FIRST_NAME VARCHAR2(20) DEFAULT NULL,
LAST_NAME VARCHAR2(25),
EMAIL VARCHAR2(25),
PHONE_NUMBER VARCHAR2(20) DEFAULT NULL,
HIRE_DATE DATE(7),
JOB_ID VARCHAR2(10),
SALARY NUMBER(8,2) DEFAULT NULL,
COMISSION_PCT NUMBER(2,2) DEFAULT NULL,
MANAGER_ID NUMBER(6) DEFAULT NULL,
DEPARTMENT_ID NUMBER(4) DEFAULT NULL
);
This is what I want to create (constraints and other information)
date datatype doesn't accept the length so no need to write date(7) just simply write date and after you run the command desc EMPLOYEES; it will show you that the length of date is by default 7.
create table EMPLOYEES(
EMPLOYEE_ID NUMBER(6) PRIMARY KEY,
FIRST_NAME VARCHAR2(20) DEFAULT NULL,
LAST_NAME VARCHAR2(25) NOT NULL,
EMAIL VARCHAR2(25) NOT NULL,
PHONE_NUMBER VARCHAR2(20) DEFAULT NULL,
HIRE_DATE DATE NOT NULL,
JOB_ID VARCHAR2(10) NOT NULL,
SALARY NUMBER(8,2) DEFAULT NULL,
COMISSION_PCT NUMBER(2,2) DEFAULT NULL,
MANAGER_ID NUMBER(6) DEFAULT NULL,
DEPARTMENT_ID NUMBER(4) DEFAULT NULL
);

PL/SQL block to populate table

I have been tasked to populate a table called Sales_Facts with a PL/SQL block but I return 0 results. The procedure is executed with out error and I run my script to populate my table but my SELECT COUNT script returns nothing. I cannot see what I am doing wrong.
Here's what I have:
CREATE TABLE Sales (
sale_ID VARCHAR2(10) NOT NULL,
salesperson_ID VARCHAR2(10) NOT NULL,
cust_ID VARCHAR2(10) NOT NULL,
sale_date DATE,
VIN VARCHAR2(20) NOT NULL,
mileage INT,
vehicle_status VARCHAR2(15),
gross_sale_price NUMBER(8,2) NOT NULL,
PRIMARY KEY (sale_ID),
CONSTRAINT FK_Customer_ID FOREIGN KEY (cust_ID) REFERENCES Customers(cust_ID),
CONSTRAINT FK_VIN_ID FOREIGN KEY (VIN) REFERENCES Sale_Vehicles(VIN));
CREATE TABLE Times (
sale_day DATE NOT NULL, --populated from Sales sale_date
day_type VARCHAR2(50) NOT NULL,
PRIMARY KEY (sale_day));
CREATE TABLE Vehicles (
vehicle_Code VARCHAR2(10),
description VARCHAR2(100),
PRIMARY KEY (vehicle_Code));
Vehicles is populated with this:
CREATE SEQUENCE veh_code_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;
COMMIT;
--PL/SQL Block
SET SERVEROUTPUT ON
DECLARE
vehType VARCHAR2(50);
v_make OLTP_Vehicles.make%type;
v_model OLTP_Vehicles.model%type;
CURSOR v_type IS SELECT DISTINCT make, model FROM OLTP_Vehicles;
BEGIN
OPEN v_type;
LOOP
FETCH v_type INTO v_make, v_model;
vehType := v_make || ', ' || v_model;
INSERT INTO Vehicles (vehicle_Code, description)
VALUES (veh_code_seq.NEXTVAL, vehType);
EXIT WHEN v_type%notfound;
END LOOP;
CLOSE v_type;
END;
/
CREATE TABLE Financing_Plans (
plan_ID VARCHAR2(10) NOT NULL,
institution VARCHAR2(25) NOT NULL,
loan_type VARCHAR2(15) NOT NULL,
percentage DECIMAL(4,2) NOT NULL,
min_down NUMBER(8,2) NOT NULL,
max_loan_amt NUMBER(8,2) NOT NULL,
max_term INT NOT NULL,
PRIMARY KEY (plan_ID));
CREATE TABLE Dealerships (
dealer_ID VARCHAR2(5) NOT NULL,
location VARCHAR(30) NULL,
region_ID VARCHAR(5) NULL,
street_address VARCHAR2(100) NOT NULL,
city VARCHAR2(25) NOT NULL,
state VARCHAR2(15) NOT NULL,
zip VARCHAR2(5) NOT NULL,
phone VARCHAR2(10) NOT NULL,
sqft NUMERIC(8,2) NULL,
opened_date DATE,
manager VARCHAR2(100) NULL,
district_ID VARCHAR2(5) NOT NULL,
PRIMARY KEY (dealer_ID),
CONSTRAINT UC_Dealership UNIQUE (dealer_ID,district_ID));
CREATE TABLE Sales_Facts (
sale_day DATE NOT NULL,
vehicle_Code VARCHAR2(10) NOT NULL,
plan_ID VARCHAR2(10) NOT NULL,
dealer_ID VARCHAR2(5) NOT NULL,
vehicles_sold NUMBER(8,2) NOT NULL,
gross_sales_amt NUMBER(8,2) NOT NULL,
CONSTRAINT PK_Sales_Facts PRIMARY KEY (sale_day, vehicle_Code, plan_ID, dealer_ID),
CONSTRAINT FK_Sale_Day FOREIGN KEY(sale_day) References Times(sale_day),
CONSTRAINT FK_Vehicle_Code FOREIGN KEY(vehicle_Code) References Vehicles(vehicle_Code),
CONSTRAINT FK_Fin_Plan_ID FOREIGN KEY(plan_ID) References Financing_Plans(plan_ID),
CONSTRAINT FK_Dealer_ID FOREIGN KEY(dealer_ID) References Dealerships(dealer_ID));
And here is my procedure that is not returning any results:
CREATE OR REPLACE PROCEDURE Populate_Sales_Facts
AS
l_sale_day DATE;
l_vehicle_Code VARCHAR2(10);
l_plan_ID VARCHAR2(10);
l_dealer_ID VARCHAR2(5);
l_vehicles_sold NUMBER(8,2);
l_gross_sales_amt NUMBER(8,2);
CURSOR c1 IS SELECT sale_day,vehicle_Code,fp.plan_ID,d.dealer_ID,
COUNT (*) AS vehicles_sold,
SUM (s.gross_sale_price) AS gross_sales_amt
FROM Times t, Sales s, Financing_Plans fp, Dealerships d, Vehicles v
WHERE t.sale_day = s.sale_date
GROUP BY sale_day, vehicle_Code, fp.plan_ID, d.dealer_ID;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO l_sale_day, l_vehicle_Code, l_plan_ID, l_dealer_ID, l_vehicles_sold, l_gross_sales_amt;
EXIT WHEN c1%NOTFOUND;
IF l_vehicles_sold <> 0 THEN
INSERT INTO SALES_FACTS (sale_day,vehicle_Code,plan_ID,dealer_ID,vehicles_sold, gross_sales_amt)
VALUES (l_sale_day,l_vehicle_Code,l_plan_ID,l_dealer_ID,l_vehicles_sold,l_gross_sales_amt);
END IF;
END LOOP;
CLOSE c1;
END;
/
BEGIN
Populate_Sales_Facts;
END;
/
I was given the fields to populate the Sales table and they cannot be changed
per my requirements but I did fix my WHERE statement to pull sale_day from the Times table where equal to the sale_date in the Sales table because those are the only fields that linked. So I was able to get the table to populate but now instead of getting no more than 200 rows, I am getting 61065 rows of data. Here are my requirements: get every possible combination of the dimension tables’ primary keys and then the total vehicles sold and gross sales amount for each combination. If these values for Total_Vehicles_Sold and Gross_Sales_Amount for a combination are zero then don’t INSERT a row into the SALES_FACT table. Only insert rows for combinations of the four foreign key columns where there
were some vehicles sold. Maybe I am just misunderstanding the task but I feel like I am getting too many rows now.

Using CLOB with IN? ORACLE

I'm trying to do this query using IN, but if the type is CLOB doesn't works.
I need that the parameter p_rut is CLOB and the query I need to use IN, because there it will a select that return more rows to compare.
How can I use parameter CLOB in a IN?
PROCEDURE INSERT_TEST (o_dat out o_cursor, p_rut in CLOB)
AS
BEGIN
OPEN o_dat FOR
select * from cliente
where rut in (p_rut);
END;
The table CLIENTE
CREATE TABLE CLIENTE
(
PRODUCTO VARCHAR(50),
RUT VARCHAR2(50),
DV VARCHAR2(50),
FONO1 VARCHAR2(50),
FONO2 VARCHAR2(50),
FONO3 VARCHAR2(50),
FONO4 VARCHAR2(50),
FONO5 VARCHAR2(50),
FONO6 VARCHAR2(50),
COMUNA VARCHAR2(50),
EDAD NUMBER(8),
SEXO NUMBER(8),
DIASMORA NUMBER(8),
AÑODEUDA NUMBER(8),
PAGOMINIMO NUMBER(8),
)
;
You can use:
DBMS_LOB.INSTR (
lob_loc IN CLOB CHARACTER SET ANY_CS,
pattern IN VARCHAR2 CHARACTER SET lob_loc%CHARSET,
offset IN INTEGER := 1,
nth IN INTEGER := 1)
RETURN INTEGER;
i.e.
PROCEDURE INSERT_TEST (o_dat out o_cursor, p_rut in CLOB)
AS
BEGIN
OPEN o_dat FOR
select * from cliente
where DBMS_LOB.INSTR (p_rut,rut)>0;
END;
using IN it can't use CLOB, so I just did a CAST to varchar2.
select * from cliente
where rut in (CAST (p_rut AS VARCHAR2(100));

How do you ORA - 00907: Missing right parenthesis

Create TABLE Emp_test1
(Employee_id Number (6)
CONSTRAINT employee_id NOT NULL,
FIRST_NAME Varchar2 (20),
LAST_NAME Varchar2 (25)
CONSTRAINT Last_name NOT NULL,
Email Varchar2 (25)
CONSTRAINT Email NOT NULL,
PHONE_NUMBER Varchar2 (20)
HIRE_DATE Date
CONSTRAINT Hire_date NOT NULL,
Job_id Varchar2 (10)
CONSTRAINT Job_id NOT NULL,
Salary Number (8,2),
Commission_pct Number (2,2),
Manager_id NUmber (6),
Department_id Number (4)),
Why do I keep getting an ORA 00907 missing right parenthesis on the hire_date line?
You've lost a comma after PHONE_NUMBER Varchar2 (20),
Create TABLE Emp_test1
(Employee_id Number (6)
CONSTRAINT employee_id NOT NULL,
FIRST_NAME Varchar2 (20),
LAST_NAME Varchar2 (25)
CONSTRAINT Last_name NOT NULL,
Email Varchar2 (25)
CONSTRAINT Email NOT NULL,
PHONE_NUMBER Varchar2 (20),
HIRE_DATE Date
CONSTRAINT Hire_date NOT NULL,
Job_id Varchar2 (10)
CONSTRAINT Job_id NOT NULL,
Salary Number (8,2),
Commission_pct Number (2,2),
Manager_id NUmber (6),
Department_id Number (4));

Update CLOB Column to NULL

I need to update an oracle clob column value to null. I tried to below but that didn't work. Any ideas?
update table_name
set CONTENT_TEMPLATE=empty_clob()
where table_key=12345;
Name Null Type
-------------------- -------- -------------
TEST_KEY NOT NULL NUMBER(10)
TEST_ID NOT NULL VARCHAR2(100)
TEST_TYPE NOT NULL VARCHAR2(30)
TEMPLATE_ID VARCHAR2(100)
ROUTE VARCHAR2(100)
MEDIUM VARCHAR2(100)
BEGIN_EFFECTIVE_DATE NOT NULL DATE
END_EFFECTIVE_DATE NOT NULL DATE
CUSTOMER_ID NOT NULL VARCHAR2(30)
VAR_ID NOT NULL VARCHAR2(30)
CREATION_DATE NOT NULL DATE
LAST_UPDATED_DATE NOT NULL DATE
LAST_UPDATED_BY NOT NULL VARCHAR2(30)
CONTENT_TEMPLATE CLOB
SUBJECT_TEMPLATE CLOB
UNIT_TYPE VARCHAR2(30)
OVERLOADED_ALERT_KEY NUMBER(10)
ALERT_TYPE_ALIAS VARCHAR2(100)
update table_name
set column_name = null
where table_key=12345;
NULL - Absense of data
empty_clob() - CLOB is initialized and empty, not same as NULL.
If you still get ORA-01407 with this column then that means there is a NOT NULL constraint on the column which is of CLOB datatype.
UPDATE:
Since the CLOB column is not NOT NULL setting it to CONTENT_TEMPLATE = NULL should work. CONTENT_TEMPLATE = empty_clob() will also work, but bear in mind that it is not same as NULL.

Resources