SQL*Loader-926: OCI error while executing delete/truncate ORA-01031: insufficient privileges

Max :

I have 12 .csv files which should be loaded in a staging table and after it loaded the data to the staging table it should load the data grouped by parameters into another table. It throws an error by creating the table. It is missing privileges.

GABER_RIGHTS.SQL:

GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB                    TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA        TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.DIM_PLAYER                TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.DIM_TEAM                   TO GABER;
GRANT SELECT, DELETE, INSERT, UPDATE ON FOOTBALLCLUB.DIM_TRAINER                  TO GABER;
exit;

gaber_footballclub.sh:

#!/bin/bash

sqlplus system/oracle @FOOTBALLCLUB_GABER_CREATE_USER.sql
sqlplus gaber/oracle @FOOTBALLCLUB_GABER_CREATE_TABLES.plsql
sqlplus gaber/oracle @FOOTBALLCLUB_GABER_CREATE_TABLES.sql
sqlplus system/oracle @GABER_RIGHTS.sql

for FILE_NAME in `ls ../data/FACT_FOOTBALLCLUB_GABER*.csv`
do
   export BASE_NAME=`basename $FILE_NAME`
   export JUST_NAME=`echo $BASE_NAME | sed -e 's/\..*//'`
   echo $FILE_NAME
   echo $BASE_NAME
   echo $JUST_NAME


sed -e 's/"//g' ../data/$FILE_NAME | dos2unix >../data/FACT_FOOTBALLCLUB_GABER.csv 
sqlldr gaber/oracle data=../data/FACT_FOOTBALLCLUB_GABER.csv control=gaber_footballclub_staging.ldr log=../log/$JUST_NAME.log bad=../log/$JUST_NAME.bad errors=20

   sqlplus gaber/oracle <<!
      INSERT INTO FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB
      SELECT 
   ID,
   Sum(NUMBER_OF_PLAYERS) as NUMBER_OF_PLAYERS,
   Sum(GOALS_SHOT) as GOALS_SHOT,
   Sum(GOALS_GOT) as GOALS_GOT,
   Sum(YELLOW_CARDS) as YELLOW_CARDS,
   Sum(RED_CARDS) as RED_CARDS,
   Sum(MINUTES_PLAYED) as MINUTES_PLAYED,
   DATE_PLAYED,
   TEAM_ID,
   TRAINER_ID
      FROM   FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA
      GROUP BY ID, DATE_PLAYED, TEAM_ID, TRAINER_ID;
      exit;
!
done

gaber_footballclub_staging.ldr:

LOAD DATA
REPLACE
INTO TABLE FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA
FIELDS TERMINATED BY ','
(
   ID,
   NUMBER_OF_PLAYERS,
   GOALS_SHOT,
   GOALS_GOT,
   YELLOW_CARDS,
   RED_CARDS,
   MINUTES_PLAYED,
   DATE_PLAYED  DATE "YYYY-MM-DD",
   TEAM_ID,
   TRAINER_ID
)

FOOTBALLCLUB_GABER_CREATE_USER.sql:

DROP TABLESPACE TBS_GABER_DWH INCLUDING CONTENTS AND DATAFILES;
DROP USER FOOTBALLCLUB CASCADE;
DROP USER GABER CASCADE;


CREATE SMALLFILE TABLESPACE TBS_GABER_DWH DATAFILE
'/home/oracle/app/oracle/oradata/orcl/gaber_dwh01.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED,
'/home/oracle/app/oracle/oradata/orcl/gaber_dwh02.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

CREATE USER GABER PROFILE DEFAULT IDENTIFIED BY "oracle"
DEFAULT TABLESPACE TBS_GABER_DWH
QUOTA UNLIMITED ON TBS_GABER_DWH
TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;
GRANT SELECT ANY DICTIONARY TO GABER;
GRANT UNLIMITED TABLESPACE TO GABER;
GRANT CONNECT TO GABER;
GRANT RESOURCE TO GABER;
GRANT CREATE TABLE TO GABER;
GRANT CREATE ANY TABLE TO GABER;
GRANT CREATE PROCEDURE TO GABER;
GRANT CREATE ANY PROCEDURE TO GABER;
GRANT EXECUTE ANY PROCEDURE TO GABER;
GRANT CREATE SESSION TO GABER;
GRANT SELECT ANY TABLE TO GABER;



CREATE USER FOOTBALLCLUB PROFILE DEFAULT IDENTIFIED BY "oracle"
DEFAULT TABLESPACE TBS_GABER_DWH
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TBS_GABER_DWH
ACCOUNT LOCK;
GRANT CREATE TABLE TO FOOTBALLCLUB;
GRANT UNLIMITED TABLESPACE TO FOOTBALLCLUB;


exit;

FOOTBALLCLUB_GABER_CREATE_TABLES.sql:

call FOOTBALLCLUB.PROC_GABER_CREATE_TABLES('FOOTBALLCLUB');
exit;

FOOTBALLCLUB_GABER_CREATE_TABLES.plsql:

CREATE OR REPLACE PROCEDURE FOOTBALLCLUB.PROC_GABER_CREATE_TABLES (SCHEMA_NAME IN VARCHAR2) IS
  v_tabcnt number;
BEGIN


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_TEAM';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TEAM
            (
                TEAM_ID  INTEGER      NOT NULL PRIMARY KEY,
                TEAM_NAME VARCHAR2(30)     NOT NULL
            )';
  end if;




  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_PLAYER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_PLAYER
            (
                PLAYER_ID     INTEGER      NOT NULL PRIMARY KEY,
                PLAYER_NAME   VARCHAR2(30) NOT NULL,
                PLAYER_NUMBER INTEGER NOT NULL,
                PLAYER_BIRTHDATE DATE NOT NULL,
                TEAM_ID INTEGER NOT NULL,

                CONSTRAINT fk_team_id
                   FOREIGN KEY (TEAM_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TEAM (TEAM_ID)
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_TRAINER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TRAINER
            (
                TRAINER_ID  INTEGER      NOT NULL PRIMARY KEY,
                TRAINER_NAME VARCHAR2(30) NOT NULL,
                TRAINER_BIRTHDATE DATE NOT NULL
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB_STA';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB_STA
            (
                ID     INTEGER    NOT NULL PRIMARY KEY,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL,

                CONSTRAINT fk_fact_team_id_st
                   FOREIGN KEY (TEAM_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TEAM (TEAM_ID),
                CONSTRAINT fk_trainer_id_st
                   FOREIGN KEY (TRAINER_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TRAINER (TRAINER_ID)
            )';
  end if;

    SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB
            (
                ID     INTEGER    NOT NULL PRIMARY KEY,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL,
                CONSTRAINT fk_fact_team_id  
                   FOREIGN KEY (TEAM_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TEAM (TEAM_ID),
                CONSTRAINT fk_trainer_id
                   FOREIGN KEY (TRAINER_ID)
                   REFERENCES ' || SCHEMA_NAME || '.DIM_TRAINER (TRAINER_ID)           
            )';
  end if;
END;
/
exit;

gaber_footballclub_staging.log: SQL*Loader: Release 11.2.0.2.0 - Production on Thu Feb 13 15:05:23 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Control File:   gaber_footballclub_staging.ldr
Data File:      ../data/FACT_FOOTBALLCLUB_GABER.csv
  Bad File:     FACT_FOOTBALLCLUB_GABER.bad
  Discard File:  none specified

 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      Conventional

Table FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA, loaded from every logical record.
Insert option in effect for this table: REPLACE

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ID                                  FIRST     *   ;       CHARACTER            
NUMBER_OF_PLAYERS                    NEXT     *   ;       CHARACTER            
GOALS_SHOT                           NEXT     *   ;       CHARACTER            
GOALS_GOT                            NEXT     *   ;       CHARACTER            
YELLOW_CARDS                         NEXT     *   ;       CHARACTER            
RED_CARDS                            NEXT     *   ;       CHARACTER            
MINUTES_PLAYED                       NEXT     *   ;       CHARACTER            
DATE_PLAYED                          NEXT     *   ;       DATE YYYY-MM-DD      
TEAM_ID                              NEXT     *   ;       CHARACTER            
TRAINER_ID                           NEXT     *   ;       CHARACTER            

SQL*Loader-926: OCI error while executing delete/truncate (due to REPLACE/TRUNCATE keyword) for table FOOTBALLCLUB.FACT_GABER_FOOTBALLCLUB_STA
ORA-01031: insufficient privileges
Max :

I have solved my problems by deleting the constraints and primary keys in the plsql script. Furthermore, I had one 0 instead of an O in one csv sheet.

The only document that has changed is FOOTBALLCLUB_GABER_CREATE_TABLES.plsql:

CREATE OR REPLACE PROCEDURE FOOTBALLCLUB.PROC_GABER_CREATE_TABLES (SCHEMA_NAME IN VARCHAR2) IS
  v_tabcnt number;
BEGIN


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
  TABLE_NAME = 'DIM_TEAM';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TEAM
            (
                TEAM_ID  INTEGER      NOT NULL,
                TEAM_NAME VARCHAR2(30)     NOT NULL
            )';
  end if;




  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_PLAYER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_PLAYER
            (
                PLAYER_ID     INTEGER      NOT NULL,
                PLAYER_NAME   VARCHAR2(30) NOT NULL,
                PLAYER_NUMBER INTEGER NOT NULL,
                PLAYER_BIRTHDATE DATE NOT NULL,
                TEAM_ID INTEGER NOT NULL
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'DIM_TRAINER';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.DIM_TRAINER
            (
                TRAINER_ID  INTEGER      NOT NULL,
                TRAINER_NAME VARCHAR2(30) NOT NULL,
                TRAINER_BIRTHDATE DATE NOT NULL
            )';
  end if;


  SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB_STA';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB_STA
            (
                ID     INTEGER    NOT NULL,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL
            )';
  end if;

    SELECT count(*) into v_tabcnt
  FROM   ALL_TABLES
  WHERE  OWNER = SCHEMA_NAME and
         TABLE_NAME = 'FACT_GABER_FOOTBALLCLUB';

  if v_tabcnt = 0 then
      EXECUTE IMMEDIATE
            'CREATE TABLE ' || SCHEMA_NAME || '.FACT_GABER_FOOTBALLCLUB
            (
                ID     INTEGER    NOT NULL,
                NUMBER_OF_PLAYERS     INTEGER NOT NULL,
                GOALS_SHOT  INTEGER NOT NULL,
                GOALS_GOT     INTEGER NOT NULL,
                YELLOW_CARDS    INTEGER NOT NULL,
                RED_CARDS         INTEGER NOT NULL,
                MINUTES_PLAYED        DECIMAL(12,2) NOT NULL,
                DATE_PLAYED       DATE NOT NULL,
                TEAM_ID            INTEGER NOT NULL,
                TRAINER_ID      INTEGER NOT NULL          
            )';
  end if;
END;
/
exit;

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=6542&siteId=1