Суть задания состоит в создании внешней таблицы. Я создал PL/SQL блок такого вида
DECLARE
N_SID PLS_INTEGER;
V_SHEMA_NAME VARCHAR2(50);
BEGIN
SELECT DISTINCT SID
INTO N_SID
FROM v$mystat;
SELECT VS.SCHEMANAME
INTO V_SHEMA_NAME
FROM V$SESSION VS
WHERE VS.SID = N_SID;
FOR REC_RECORD IN (SELECT DECODE (
COUNT (*),
0, PKG_CONST.NO_VALUE,
PKG_CONST.YES_VALUE) AS TABLE_EXISTS
FROM DBA_TABLES U
WHERE U.TABLE_NAME = 'STG_PROVIDER_MARGIN_FACTOR'
AND U.OWNER = V_SHEMA_NAME)
LOOP
IF REC_RECORD.TABLE_EXISTS = PKG_CONST.NO_VALUE
THEN
EXECUTE IMMEDIATE '
CREATE TABLE STG_PROVIDER_MARGIN_FACTOR
(LOCATION_CODE VARCHAR2(20),
MARGIN_FACTOR VARCHAR2(50),
SUBMODALITY NUMBER(5)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY DATA_PUMP_DIR
ACCESS PARAMETERS
(RECORDS DELIMITED BY ''\n''
FIELDS TERMINATED BY '','')
LOCATION (''provider_margin_factor.csv''))';
DBMS_OUTPUT.PUT_LINE ('External table STG_PROVIDER_MARGIN_FACTOR created');
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
ROLLBACK;
--DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
Блок отрабатывает хорошо, задачу свою выполняет. Но старший разработчик, задал вопрос. Что , есть еще вьюшка DBA_EXTERNAL_TABLES. Можно ли ее использовать в моем блок. Я переписал свой блок на
DECLARE
N_SID PLS_INTEGER;
V_SHEMA_NAME VARCHAR2(50);
BEGIN
SELECT DISTINCT SID
INTO N_SID
FROM v$mystat;
SELECT VS.SCHEMANAME
INTO V_SHEMA_NAME
FROM V$SESSION VS
WHERE VS.SID = N_SID;
FOR REC_RECORD IN (SELECT DECODE (
COUNT (*),
0, PKG_CONST.NO_VALUE,
PKG_CONST.YES_VALUE) AS TABLE_EXISTS
FROM DBA_EXTERNAL_TABLES U
WHERE U.TABLE_NAME = 'STG_PROVIDER_MARGIN_FACTOR'
AND U.OWNER = V_SHEMA_NAME )
LOOP
IF REC_RECORD.TABLE_EXISTS = PKG_CONST.NO_VALUE
THEN
EXECUTE IMMEDIATE '
CREATE TABLE STG_PROVIDER_MARGIN_FACTOR
(LOCATION_CODE VARCHAR2(20),
MARGIN_FACTOR VARCHAR2(50),
SUBMODALITY NUMBER(5)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY DATA_PUMP_DIR
ACCESS PARAMETERS
(RECORDS DELIMITED BY ''\n''
FIELDS TERMINATED BY '','')
LOCATION (''provider_margin_factor.csv''))';
DBMS_OUTPUT.PUT_LINE ('External table STG_PROVIDER_MARGIN_FACTOR created');
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
RAISE;
ROLLBACK;
--DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
И тут уже выскачило две ошибки
1) ORA - 00955
2) ORA - 06515.
Подскажите возможно ли использовать в моем примере DBA_EXTERNAL_TABLES вместо DBA_TABLES. И если нет то почему ведь по логике вещей они схожи