oracle - 表存在于存储过程中,而在 select 中使用,但在 Insert 语句中使用时不存在
问题描述
我的存储过程是这样的:
create or replace procedure tpk.sp_Test_proc
IS
err_code NUMBER;
err_msg VARCHAR (500);
v_tbl_cnt NUMBER;
v_tbl_valid NUMBER;
Begin
SELECT COUNT(*) INTO v_tbl_cnt FROM USER_TABLES
WHERE TABLE_NAME IN (UPPER('Tbl1'),UPPER('tbl2'),UPPER('tbl3'));
IF(v_tbl_cnt =3) THEN
EXECUTE IMMEDIATE 'TRUNCATE TABLE Tbl1';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Tbl2';
EXECUTE IMMEDIATE 'TRUNCATE TABLE Tbl3';
EXECUTE IMMEDIATE 'DROP TABLE Tbl1';
EXECUTE IMMEDIATE 'DROP TABLE Tbl2';
EXECUTE IMMEDIATE 'DROP TABLE Tbl3';
EXECUTE IMMEDIATE
'CREATE global temporary TABLE tbl1
( Id Integer... )'
Insert into tbl1
Select * from another_schema.Dw_table /* In this line it throws error Table does not exist */
end if;
end;
我用存储过程厌倦了同一张表,只是为了获取它在那里工作的数据,但是当我在 Insert 语句中使用它时会抛出一个错误
PL/SQL: ORA-00942 表或视图不存在。
我完全糊涂了——这里有什么问题?
解决方案
Select * from another_schema.Dw_table
您无权从该表中进行选择。即使您认为您这样做(通过角色授予),它也不会在存储过程中工作 - 您必须将其直接授予您连接的用户。
此外,先截断表,然后再删除它们是没有意义的。把它们放下。
此外,很少需要动态创建表(按照您的方式),尤其是全局临时表。创建一次,多次使用。没有掉落。没有(重新)在 PL/SQL 中创建它们。
推荐阅读
- wso2 - wso2am - 扩展 userstoremanager - 访问 Java 安全管理器特权块时出错
- java - Spring Boot App 无法从控制台打开为 .jar
- php - wordpress 会自动理解 $post->id 还是我需要自己设置
- tensorflow - Keras/Tensorflow 批量矩阵跨轴乘法
- r - 通过忽略数据框中的 NA 的行检查连续元素(即列)的变化
- angular - Angular 5 - 条件验证器不起作用
- javascript - Angular 6:如何在进行 http 调用时将响应类型设置为文本
- javascript - Vue 未在测试中加载(黄瓜/水豚)
- c# - 如何在使用 HtmlAgilityPack 抓取时识别推文是原创还是转推?
- html - 在悬停时为 HTML 表格边框着色