Table 在 select 中使用时存在于存储过程中,但在 Insert 语句中使用时不存在
Table exists in stored procedure while used in select but not when Used in Insert statement
我的存储过程是这样的:
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;
我厌倦了同样的 table 存储过程只是为了获取它在那里工作的数据但是当我在 Insert 语句中使用它时它抛出一个错误
PL/SQL: ORA-00942 table or view does not exist.
我完全糊涂了 - 这里有什么问题?
Select * from another_schema.Dw_table
您没有从那个 table 到 select 的特权。即使你认为你这样做(通过角色授予),它也不会在存储过程中工作 - 你必须将它直接授予你所连接的用户。
此外,没有必要先截断 table,然后再删除它们。放下它们。
此外,很少需要动态创建 tables(按照您的方式),尤其是 全局临时 tables。创建一次,多次使用。没有掉落。没有(重新)在 PL/SQL.
中创建它们
我的存储过程是这样的:
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;
我厌倦了同样的 table 存储过程只是为了获取它在那里工作的数据但是当我在 Insert 语句中使用它时它抛出一个错误
PL/SQL: ORA-00942 table or view does not exist.
我完全糊涂了 - 这里有什么问题?
Select * from another_schema.Dw_table
您没有从那个 table 到 select 的特权。即使你认为你这样做(通过角色授予),它也不会在存储过程中工作 - 你必须将它直接授予你所连接的用户。
此外,没有必要先截断 table,然后再删除它们。放下它们。
此外,很少需要动态创建 tables(按照您的方式),尤其是 全局临时 tables。创建一次,多次使用。没有掉落。没有(重新)在 PL/SQL.
中创建它们