我的存储过程如下:
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表或视图不存在。
我很困惑-这是怎么了?
答案 0 :(得分:0)
Select * from another_schema.Dw_table
您无权从该表中进行选择。即使您认为自己做了(通过角色授予),它也不能在存储过程中工作-您必须直接将其授予与您连接的用户。
此外,首先截断表,然后删除它们没有意义。放下它们。
此外,很少需要动态创建表(您的方式),尤其是全局临时表。创建一次,多次使用。没有下降。否(不)在PL / SQL中创建它们。