首页 > 解决方案 > 我在存储过程(包)中面临删除操作的问题

问题描述

我在这里面临一个问题。我有一个表Products,其中有名为等的列prod_trkg_tran_idcntr_nbr我也有两个表instance1instance2其中还包含prod_trkg_tran_idandcntr_nbr并且它们有一行数据,每个数据都具有相同的cntr_nbr. 我在 Oracle SQLDeveloper 中运行了如下查询。它工作正常并从中删除了一行prod_trkg_tran。你能解释一下吗?

但是当我通过分配在SP中尝试这个时:

p_where_clause:=  'WHERE t.prod_trkg_tran_id in (
    select distinct tp82.PROD_TRKG_TAN_ID
    from instance_1 tp21
    join instance_2 tp82 on tp21.cntr_nbr=tp82.cntr_nbr
)'

并调用delete_table一个语句包含 的方法

'DELETE FROM ' || p_table_name ||' t ' || p_where_clause;

p_table_nameprod_trkg_tran并且p_where_clause是我之前定义的那个。

如果我运行它,SP 记录不会从prod_trkg_tran.

理想情况下,它应该像我在 SQLDeveloper 中尝试的那样删除。你能解释一下吗?

delete from prod_trkg_tran t 
WHERE t.prod_trkg_tran_id in (
    select distinct tp82.PROD_TRKG_TRAN_ID  
    from  instance_1 tp21 
    join instance_2 tp82 on tp21.cntr_nbr=tp82.cntr_nbr
);

标签: oraclestored-proceduresplsql

解决方案


这很可能是一个授权问题,执行模式/用户没有删除或选择上述表的授权。

如果您的用户具有 DBA 权限,则在使用 SQL Developer 时不会遇到此错误,但存储过程会。

在您的情况下,您的表可能是另一个模式表的同义词,并且您可能没有对这些表的授权。

请确保您有足够的补助金。

顺便说一句,您面临的错误是什么?


推荐阅读