我的PL/SQL过程中有代码片段,它执行以下操作:
INSERT INTO payment_operations (id, subscriber, amount, description) VALUES (payment_id, 1234, 5, 'Test');
COMMIT;
SELECT subscriber INTO test_subscriber FROM payment_operations_view WHERE id = payment_id;
Run Code Online (Sandbox Code Playgroud)
在此之后我得到一个异常"no_data_found"!但是,如果我在运行该过程后自己执行相同的SELECT语句,则会看到该记录.
请注意,我从视图中进行选择,而不是直接从表中进行选择.为什么我在插入后无法立即看到这些数据?
这是预感:
请问payment_options表有一栏payment_id?
我问,因为在下面的语句中,在PL/SQL中,如果payment_id作为列存在,那么该列将用于本地PL/SQL变量:
SELECT subscriber
INTO test_subscriber
FROM payment_operations_view
WHERE id = payment_id;
Run Code Online (Sandbox Code Playgroud)
由于它正在使用该payment_id列,如果它存在,并且因为它未在插入中设置,您可能正在执行where id = null从不计算为true的列.
我使用v_来表示变量.所以你的代码片段会变成(其余的程序按顺序改变):
INSERT INTO payment_operations (id, subscriber, amount, description)
VALUES (v_payment_id, 1234, 5, 'Test');
COMMIT;
SELECT subscriber
INTO v_test_subscriber
FROM payment_operations_view WHERE id = v_payment_id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |