Транзакции будут взяты из таблицы хранения (NEW_TRANSACTIONS) и вставлены в таблицы TRANSACTION_DETAIL и TRANSACTION_HISTORY. соответствующий остаток на счете будет обновлен в таблице ACCOUNT.
Мой код продолжает получать эту проблему: «Точная выборка возвращает больше, чем запрошенный номер строки» таблица
Отчет об ошибке - ORA-01422: точная выборкавозвращает больше запрошенного числа строк ORA-06512: в строке 28 01422. 00000 - «точная выборка возвращает больше запрошенного количества строк» * Причина: число, указанное в точной выборке, меньше, чем возвращенные строки. * Действие: переписать запрос или изменить количество запрошенных строк
ОБЪЯВИТЬ
r_new_trans NEW_TRANSACTIONS%ROWTYPE;
cursor c_trans_data IS
SELECT UNIQUE transaction_no, transaction_date,description, account_no, transaction_type, transaction_amount
FROM new_transactions;
TYPE UP_ACCOUNT IS RECORD (
A_NO ACCOUNT.ACCOUNT_NO%type,
A_TYPE_CODE account.account_type_code%type,
A_BALANCE account.account_balance%TYPE,
A_trans_type account_type.default_trans_type%type);
update_a UP_ACCOUNT;
--v_new_trans_amount TRANSACTION_DETAIL.TRANSACTION_AMOUNT%TYPE := 0;
v_new_balance ACCOUNT.ACCOUNT_BALANCE%TYPE := 0;
v_transaction_debit NEW_TRANSACTIONS.TRANSACTION_TYPE%TYPE := 'D';
v_transaction_credit NEW_TRANSACTIONS.TRANSACTION_TYPE%TYPE := 'C';
v_transaction_number new_transactions.transaction_no%TYPE;
v_transaction_variable new_transactions.transaction_no%TYPE := 0;
v_transaction_deta_variable new_transactions.transaction_no%TYPE := 0;
v_temp_balance account.account_balance%type := 0;
НАЧАТЬ
SELECT account_no, a.account_type_code, account_balance, default_trans_type into update_a
FROM ACCOUNT a JOIN ACCOUNT_TYPE at on a.account_type_code = at.account_type_code ;
--/1st cursor/
FOR r_trans IN c_trans_data LOOP
IF(r_trans.TRANSACTION_NO <> v_transaction_variable)
THEN
INSERT INTO TRANSACTION_HISTORY
VALUES (r_trans.TRANSACTION_NO, r_trans.TRANSACTION_DATE,r_trans.DESCRIPTION);
END IF;
v_transaction_variable := r_trans.TRANSACTION_NO;
DBMS_OUTPUT.PUT_LINE('v_transaction_variable');
IF(r_trans.TRANSACTION_NO <> v_transaction_variable)
THEN
INSERT INTO TRANSACTION_DETAIL
VALUES (r_trans.ACCOUNT_NO, r_trans.TRANSACTION_NO,r_trans.TRANSACTION_TYPE,r_trans.TRANSACTION_AMOUNT);
END IF;
v_transaction_deta_variable:= r_trans.TRANSACTION_NO;
DBMS_OUTPUT.PUT_LINE('v_transaction_deta_variable');
IF r_trans.transaction_type <> update_a.A_trans_type
THEN
v_temp_balance := v_temp_balance - r_trans.TRANSACTION_AMOUNT;
UPDATE account
SET account_balance = v_temp_balance
WHERE account_no = r_trans.account_no;
ELSIF r_trans.transaction_type = update_a.A_trans_type
THEN
v_temp_balance := v_temp_balance + r_trans.TRANSACTION_AMOUNT;
UPDATE account
SET account_balance = v_temp_balance
WHERE account_no = r_trans.account_no;
END IF;
END LOOP;
КОНЕЦ;
уже купилибудут взяты из таблицы хранения (NEW_TRANSACTIONS) и вставлены в таблицы TRANSACTION_DETAIL и TRANSACTION_HISTORY. соответствующий баланс счета будет обновлен в таблице ACCOUNT.