Почему возникает ошибка стадии хранимой процедуры, если она отлично работает в интерфейсе командной строки?

У меня есть хранимая процедура, я уже пробовал свою хранимую процедуру с Begin StoredProcedureName; Конец; В моем CLI и это успех. Моя хранимая процедура работает абсолютно нормально.

CREATE OR REPLACE PROCEDURE "SCHEMA"."TEST_SP"
IS
    BACKDATE_BUSSDATE DATE;
    VAR VARCHAR2(4000);
BEGIN

    --- SET VARIABLE END OF MONTH ---
    SELECT EOMLASTMONTH 
    INTO BACKDATE_BUSSDATE
    FROM DIM_DATE WHERE TO_DATE(BUS_DT,'DD/MM/YYYY') = TO_DATE(SYSDATE-1,'DD/MM/YYYY');

    -- TRUNCATE TABLE TEMP
    VAR := 'TRUNCATE TABLE TEMP_INSERT_BACKDATE_HIPORT';
    EXECUTE IMMEDIATE VAR;

    --- INSERT DATA KE TEMP TABLE YG DI BUAT ---
    INSERT INTO TEMP_INSERT_BACKDATE_HIPORT
    SELECT CURR.BUSINESS_NUMBER,CURR.PERSON_NUMBER,CURR.ACCOUNT_SOURCE,CURR.PRODUCT_CODE,CURR.CONTAINER_NUMBER,CURR.CURRENCY_CODE,CURR.EXCHANGE_RATE,CURR.QUANTITY,CURR.MARKET_PRICE,CURR.MARKET_PRICE_DATE,CURR.PURCHASE_PRICE,CURR.PURCHASE_VALUE,CURR.CURRENT_BALANCE_ORG_AMOUNT,CURR.CURRENT_BALANCE_IDR_AMOUNT,CURR.TOTAL_DEBIT_AMOUNT,CURR.TOTAL_CREDIT_AMOUNT,CURR.LAST_MONTH_BALANCE_ORG_AMOUNT,CURR.PROFIT_LOSS_POTENTIAL_PCT,CURR.SUM_INSURED_AMOUNT,CURR.CASH_BLOCKING_FLAG,CURR.CASH_BLOCKING_REASON,CURR.INTEREST_RATE,CURR.INTEREST_TYPE_CODE,CURR.ACCRUED_INTEREST,CURR.PAYMENT_DATE,CURR.PROCESS
    FROM (SELECT * FROM TEST
    WHERE ACCOUNT_SOURCE = 'HIPORT' 
    AND BUSINESS_DATE = TO_DATE(SYSDATE-1,'DD/MM/YYYY')) CURR
    LEFT JOIN (SELECT * FROM TEST
    WHERE ACCOUNT_SOURCE = 'HIPORT' 
    AND TO_DATE(BUSINESS_DATE) = TO_DATE(SYSDATE-2)) EOM
    ON EOM.BUSINESS_NUMBER = CURR.BUSINESS_NUMBER 
    AND EOM.PERSON_NUMBER = CURR.PERSON_NUMBER 
    AND EOM.ACCOUNT_SOURCE = CURR.ACCOUNT_SOURCE 
    AND EOM.PRODUCT_CODE = CURR.PRODUCT_CODE
    WHERE EOM.BUSINESS_NUMBER IS NULL;

    --- INSERT DATA KE FACT WM POSITION DARI TEMP TABLE ---
    LOOP
         DBMS_OUTPUT.PUT_LINE(BACKDATE_BUSSDATE);
         DBMS_OUTPUT.PUT_LINE( 'INSERT INTO TEST(BUSINESS_DATE,BUSINESS_NUMBER,PERSON_NUMBER,ACCOUNT_SOURCE,PRODUCT_CODE,CONTAINER_NUMBER,CURRENCY_CODE,EXCHANGE_RATE,QUANTITY,MARKET_PRICE,MARKET_PRICE_DATE,PURCHASE_PRICE,PURCHASE_VALUE,CURRENT_BALANCE_ORG_AMOUNT,CURRENT_BALANCE_IDR_AMOUNT,TOTAL_DEBIT_AMOUNT,TOTAL_CREDIT_AMOUNT,LAST_MONTH_BALANCE_ORG_AMOUNT,PROFIT_LOSS_POTENTIAL_PCT,SUM_INSURED_AMOUNT,CASH_BLOCKING_FLAG,CASH_BLOCKING_REASON,INTEREST_RATE,INTEREST_TYPE_CODE,ACCRUED_INTEREST,PAYMENT_DATE,PROCESS_NAME,INSERT_DATE)'
                            || 'SELECT TO_DATE('''|| BACKDATE_BUSSDATE || ''',''DD-MM-YYYY''),BUSINESS_NUMBER,PERSON_NUMBER,ACCOUNT_SOURCE,PRODUCT_CODE,CONTAINER_NUMBER,CURRENCY_CODE,EXCHANGE_RATE,QUANTITY,MARKET_PRICE,MARKET_PRICE_DATE,PURCHASE_PRICE,PURCHASE_VALUE,CURRENT_BALANCE_ORG_AMOUNT,CURRENT_BALANCE_IDR_AMOUNT,TOTAL_DEBIT_AMOUNT,TOTAL_CREDIT_AMOUNT,LAST_MONTH_BALANCE_ORG_AMOUNT,PROFIT_LOSS_POTENTIAL_PCT,SUM_INSURED_AMOUNT,CASH_BLOCKING_FLAG,CASH_BLOCKING_REASON,INTEREST_RATE,INTEREST_TYPE_CODE,ACCRUED_INTEREST,PAYMENT_DATE,PROCESS,TO_DATE(SYSDATE)'
                             || 'FROM TEMP_INSERT');
         EXECUTE IMMEDIATE  'INSERT INTO TEST (BUSINESS_DATE,BUSINESS_NUMBER,PERSON_NUMBER,ACCOUNT_SOURCE,PRODUCT_CODE,CONTAINER_NUMBER,CURRENCY_CODE,EXCHANGE_RATE,QUANTITY,MARKET_PRICE,MARKET_PRICE_DATE,PURCHASE_PRICE,PURCHASE_VALUE,CURRENT_BALANCE_ORG_AMOUNT,CURRENT_BALANCE_IDR_AMOUNT,TOTAL_DEBIT_AMOUNT,TOTAL_CREDIT_AMOUNT,LAST_MONTH_BALANCE_ORG_AMOUNT,PROFIT_LOSS_POTENTIAL_PCT,SUM_INSURED_AMOUNT,CASH_BLOCKING_FLAG,CASH_BLOCKING_REASON,INTEREST_RATE,INTEREST_TYPE_CODE,ACCRUED_INTEREST,PAYMENT_DATE,PROCESS_NAME,INSERT_DATE)'
                            || 'SELECT TO_DATE('''|| BACKDATE_BUSSDATE || ''',''DD-MM-YYYY''),BUSINESS__NUMBER,PERSON_NUMBER,ACCOUNT_SOURCE,PRODUCT_CODE,CONTAINER_NUMBER,CURRENCY_CODE,EXCHANGE_RATE,QUANTITY,MARKET_PRICE,MARKET_PRICE_DATE,PURCHASE_PRICE,PURCHASE_VALUE,CURRENT_BALANCE_ORG_AMOUNT,CURRENT_BALANCE_IDR_AMOUNT,TOTAL_DEBIT_AMOUNT,TOTAL_CREDIT_AMOUNT,LAST_MONTH_BALANCE_ORG_AMOUNT,PROFIT_LOSS_POTENTIAL_PCT,SUM_INSURED_AMOUNT,CASH_BLOCKING_FLAG,CASH_BLOCKING_REASON,INTEREST_RATE,INTEREST_TYPE_CODE,ACCRUED_INTEREST,PAYMENT_DATE,PROCESS,TO_DATE(SYSDATE)'
                             || 'FROM TEMP_INSERT';
         BACKDATE_BUSSDATE := TO_DATE(BACKDATE_BUSSDATE+1,'DD/MM/YYYY');
         EXIT WHEN TO_DATE(BACKDATE_BUSSDATE,'DD/MM/YYYY') = TO_DATE(SYSDATE-1,'DD/MM/YYYY');
    END LOOP;
END;

Я попытался перевести свою хранимую процедуру на этап хранимой процедуры в DataStage. Мой дизайн работы выглядит так

Oracle Connector=>Transformer=>Oracle Connector=>Stored Procedure

С 0 Data задание выполняется отлично. Когда я пытался с одним или несколькими данными, я получал ошибку ORA-6512. Не является ли ошибка «ORA-xxxx» ошибкой Oracle? Но я запускаю свою хранимую процедуру Oracle, и она отлично завершена.

Моя конфигурация этапа хранимых процедур выглядела следующим образом

Синтаксис: Имя процедуры: TEST_SP Тип процедуры: Преобразование Генерировать вызов процедуры: проверено (я пробовал вручную `` не отмечен '' и все тот же результат)

Подключение данных: (пусто)

Общие: Я уже заполнил все учетные данные

на входе: выполнить процедуру для каждой строки (отмечено) Столбцы: я беру все из трансформатора

Пожалуйста, у кого-нибудь есть идеи? Я уже очень застрял.

Изменить: это сообщение, когда я меняю этап хранимой процедуры на «Целевой»

Stored_Procedure_5,0: Неустранимая ошибка: Неустранимая ошибка: ORA-06550: строка 1, столбец 7: PLS-00306: неправильное количество или типы аргументов в вызове «TEST_SP» ORA-06550: строка 1, столбец 7: PL / SQL: Заявление игнорируется Ошибка хранимой процедуры

и это сообщение, когда я перехожу в преобразование

Stored_Procedure_5,0: Неустранимая ошибка: Неустранимая ошибка: ORA-01858: обнаружен нечисловой символ вместо ожидаемого числа ORA-06512: в «SCHEMA.TEST_SP», строка 8 ORA-06512: в строке 1


person PiPio    schedule 11.05.2020    source источник
comment
покажите полную трассировку стека ошибок.   -  person OldProgrammer    schedule 11.05.2020
comment
Вы используете / разрабатываете параллельную работу в DataStage?   -  person MichaelTiefenbacher    schedule 11.05.2020
comment
Это сообщение появляется, когда я меняю стадию хранимой процедуры на Target Stored_Procedure_5,0: Fatal Error: Fatal: ORA-06550: строка 1, столбец 7: PLS-00306: неправильное количество или типы аргументов при вызове TEST_SP ORA- 06550: строка 1, столбец 7: PL / SQL: инструкция проигнорирована Ошибка хранимой процедуры, и это сообщение появляется, когда я перехожу в преобразование Stored_Procedure_5,0: Fatal Error: Fatal: ORA-01858: был обнаружен нечисловой символ, где числовое ожидалось ORA-06512: в SCHEMA.TEST_SP, строка 8 ORA-06512: в строке 1   -  person PiPio    schedule 12.05.2020
comment
Да, я использую параллельную работу с этапом хранимой процедуры в палитре на вкладках базы данных   -  person PiPio    schedule 12.05.2020


Ответы (1)


Ваша проблема, скорее всего, следующая:

TO_DATE(SYSDATE-1,'DD/MM/YYYY');

SYSDATE уже является датой, поэтому, когда мы видим this this, мы делаем следующее:

  • оценить SYSDATE-1
  • преобразовать это в строку (потому что TO_DATE принимает строку в качестве первого ввода)
  • затем преобразуйте эту строку в дату с TO_DATE

В вашем сеансе маска формата по умолчанию, вероятно, дд / мм / гггг, поэтому преобразование даты в строку и затем обратно работает без происшествий.

В DataStage, если их формат сеанса отличается (например, ДД-МЕС-ГГГГ), вы получите сообщение об ошибке, потому что выполните:

  • преобразовать sysdate-1 в строку = 10-MAY-2020
  • попробуйте преобразовать это в дату, используя DD / MM / YYYY ..... splat!

Код

BUSINESS_DATE = TO_DATE(SYSDATE-1,'DD/MM/YYYY'))

просто должно быть

BUSINESS_DATE = trunc(SYSDATE-1)
person Connor McDonald    schedule 12.05.2020
comment
Итак, я попытался переместить этап хранимой процедуры после соединителя оракула и после моего последнего преобразователя. Это дало мне успех (зеленая линия), когда я переместил его после соединителя оракула, но хранимая процедура не запускалась / не выполнялась. Но когда я переместил этап хранимой процедуры после своего трансформатора, так что мой трансформатор имеет 2 ветви узлов, первая - к соединителю Oracle, вторая - к хранимой процедуре. это дало мне ошибку. и да, я попробовал ваш совет, спасибо, что ответили, кстати :) - person PiPio; 12.05.2020