У меня есть хранимая процедура, я уже пробовал свою хранимую процедуру с 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