我正在进行数据迁移,并且我一直要求检查一些表名,我没有DBA权限,而且USER_TABLE视图没用,因为这些表来自其他用户。所以我的想法是做一个像这样的查询(我正在使用oracle sql developer):
CREATE GLOBAL TEMPORARY TABLE table_exist (NAME VARCHAR(50), EXIST VARCHAR(15))
ON COMMIT DELETE ROWS
/
DECLARE
v_exist number;
BEGIN
SELECT (1) INTO v_exist FROM SCHEMA.TABLE WHERE ROWNUM =1;
INSERT INTO table_exist (NAME, EXIST)
VALUES ('TABLE','EXIST');
EXCEPTION
WHEN OTHERS THEN
INSERT INTO table_exist (NAME, EXIST)
VALUES ('TABLE','NOT_EXIST');
END;
/
SELECT * FROM table_exist;
/
DROP TABLE table_exist;
问题是当表不存在时sql忽略异常块这里是我得到的错误:
Informe de error -
ORA-06550: línea 5, columna 55:
PL/SQL: ORA-00942: la tabla o vista no existe
ORA-06550: línea 5, columna 3:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
no se ha seleccionado ninguna fila
Table TABLE_EXIST borrado.
你能告诉我为什么我得到这个错误以及为什么sql不读取异常块? (我在sql oracle中没有太多经验。)
多克斯,我希望你能帮助我。
答案 0 :(得分:1)
各种目录视图有三个版本:DBA_,USER_和ALL_。您需要查询的是ALL_TABLES
(不是USER_TABLES
,它只显示您自己的表格,而不是DBA_TABLES
,因为您没有DBA权限)。 ALL_TABLES
会向您显示您有权查看的所有表格,包括其他用户。
也许您“需要”看到的某些表格无法看到,因为您没有必要的权限。这表明你被要求做的事与你所获得的权力之间存在着不匹配的迹象;它不会有“技术”方式,它将成为一个商业问题。