oracle - 我在存储过程(包)中面临删除操作的问题
问题描述
我在这里面临一个问题。我有一个表Products
,其中有名为等的列prod_trkg_tran_id
。cntr_nbr
我也有两个表instance1
,instance2
其中还包含prod_trkg_tran_id
andcntr_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_name
是prod_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
);
解决方案
这很可能是一个授权问题,执行模式/用户没有删除或选择上述表的授权。
如果您的用户具有 DBA 权限,则在使用 SQL Developer 时不会遇到此错误,但存储过程会。
在您的情况下,您的表可能是另一个模式表的同义词,并且您可能没有对这些表的授权。
请确保您有足够的补助金。
顺便说一句,您面临的错误是什么?
推荐阅读
- python - 获得最频繁的两个连续数字
- testing - Flutter:如何模拟 Bloc
- javascript - 计算器问题需要解决
- c# - System.Runtime.InteropServices.COMException:“此操作的源对象不合适”。在检索连接的形状时识别
- java - 如何为第三方应用程序创建一个连接池/只创建一次?
- javascript - 仅返回唯一元素的嵌套数组过滤器
- c# - 在所有操作系统(Windows、Linux 和 MAC)上编译 R 包中的 C# 代码
- node.js - 部署到 Google Appengine 时的 NPM 调试日志
- sql - Oracle - 按记录范围分组的最小值
- c++ - 我可以在c ++中将异质函数散列到undered_map吗