在PL/SQL过程中提交后无法找到数据?

Ari*_*iod 2 sql oracle

我的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语句,则会看到该记录.

请注意,我从视图中进行选择,而不是直接从表中进行选择.为什么我在插入后无法立即看到这些数据?

Sha*_*nce 7

这是预感:

请问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)