Не могу понять, как эта процедура должна работать, получая странную ошибку, которую я не могу понять - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь написать процедуру, которая создает или заменяет представление, использующее пользовательскую функцию, которую я создал.Однако, когда я запускаю процедуру, я получаю сообщение об ошибке:

ORA-00942: таблица или представление не существует
ORA-06512: в "O015596H.CALCULATE_PAY_DUE", строка 23
ORA-06512: в строке 2

CALCULATE_PAY_DUE - это название моей процедуры.Он берет данные из таблицы с именем STAFF_HOURS и использует UDF с именем CALCULATE_STAFF_PAY.Я не понимаю, почему он ищет таблицу или представление с именем CALCULATE_PAY_DUE?

Я попытался запустить процедуру с обоими из них, но оба выдают одну и ту же ошибку:

BEGIN
  CALCULATE_PAY_DUE;
END;

BEGIN
  CALCULATE_PAY_DUE();
END;

Вот код для процедуры:

CREATE OR REPLACE PROCEDURE CALCULATE_PAY_DUE
IS

STAFF_ID NUMBER;
FIRST_NAME VARCHAR2(500);
LAST_NAME VARCHAR2(500);
HOURS_WORKED NUMBER;
MAX_HOURS NUMBER;
HOURLY_RATE NUMBER;
OVERTIME_RATE NUMBER;
WEEK_NUM NUMBER;
TOTAL_DUE NUMBER;
CREATE_VIEW_STMNT VARCHAR2(5000);

CURSOR C1 IS
    SELECT STAFF_ID, FIRST_NAME, LAST_NAME, HOURS_WORKED, MAX_HOURS, HOURLY_RATE, OVERTIME_RATE, WEEK_NUM, CALCULATE_WAGES(STAFF_ID, WEEK_NUM) AS "TOTAL_DUE" FROM STAFF_HOURS;

BEGIN

OPEN C1;
FETCH C1 INTO STAFF_ID, FIRST_NAME, LAST_NAME, HOURS_WORKED, MAX_HOURS, HOURLY_RATE, OVERTIME_RATE, WEEK_NUM, TOTAL_DUE;

CREATE_VIEW_STMNT := 'CREATE OR REPLACE VIEW PAY_DUE AS SELECT * FROM C1';
EXECUTE IMMEDIATE CREATE_VIEW_STMNT;

END;

1 Ответ

1 голос
/ 05 мая 2019

Вы пытаетесь создать вид из C1. С1 - курсор, это невозможно.

используйте вместо:

CREATE_VIEW_STMNT := 'CREATE OR REPLACE VIEW PAY_DUE AS SELECT STAFF_ID, FIRST_NAME, LAST_NAME, HOURS_WORKED, MAX_HOURS, HOURLY_RATE, OVERTIME_RATE, WEEK_NUM, CALCULATE_WAGES(STAFF_ID, WEEK_NUM) AS "TOTAL_DUE" FROM STAFF_HOURS';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...