我在netezza (运行版本7.1.0.1-P1 Build 37788)中的新手,我有2个数据库:
在DB "A“中,我有过程SP_DROP_TMP_TABLE_DBB()
create or replace procedure SP_DROP_TMP_TABLE_DBB()
LANGUAGE NZPLSQL RETURNS INT4 AS
BEGIN_PROC
DECLARE
BEGIN
/* HAPUS TABLE HASIL CLUSTERING */
EXECUTE IMMEDIATE '
DROP TABLE DBB.USR3.STG_AP_LOC_KMEANS_OUT;
';
/* HAPUS ALL_NMS_DETAIL */
EXECUTE IMMEDIATE '
DROP TABLE DBB.USR3.ALL_DETAIL;
';
END;
END_PROC;SP_DROP_TMP_TABLE_DBB()用于删除DB"B“中的所有TMP表,但我需要从DB”A“(在DB”A“中创建的SP)调用它。
但当我呼叫DB"A“时
CALL SP_DROP_TMP_TABLE_DBB()结果是:
ERROR: Cross Database Access not supported for this type of command然而,当我在DB"A“上运行手动查询时:
DROP TABLE DBB.USR3.STG_AP_LOC_KMEANS_OUT;起作用了
我不明白为什么会发生,也许你有建议帮我
Thx
发布于 2014-11-25 17:42:44
不能从DBA执行写入DBB的数据库或数据库目录的操作,这包括删除表。
当您运行此命令并成功执行时:
DROP TABLE DBB.USR3.STG_AP_LOC_KMEANS_OUT;那么我必须相信,你不能依附于DBA。
您是从Aginity、NZSQL或其他工具运行测试命令吗?
以下是系统的行为方式。
[nz@netezza ~]$ nzsql -d dba
Welcome to nzsql, the IBM Netezza SQL interactive terminal.
Type: \h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
DBA.ADMIN(ADMIN)=> drop table dbb.admin.STG_AP_LOC_KMEANS_OUT;
ERROR: Cross Database Access not supported for this type of command
DBA.ADMIN(ADMIN)=> \c dbb
You are now connected to database dbb.
DBB.ADMIN(ADMIN)=> drop table dbb.admin.STG_AP_LOC_KMEANS_OUT;
DROP TABLE关于存储过程,您可以在DBA中定义一个写入/删除DBB的存储过程,但是在连接到DBB时必须调用DBA中的SP。
例如:
DBA.ADMIN(ADMIN)=> create or replace procedure SP_DROP_TMP_TABLE_DBB()
DBA.ADMIN(ADMIN)-> LANGUAGE NZPLSQL RETURNS INT4 AS
DBA.ADMIN(ADMIN)-> BEGIN_PROC
DBA.ADMIN(ADMIN)$>
DBA.ADMIN(ADMIN)$> DECLARE
DBA.ADMIN(ADMIN)$>
DBA.ADMIN(ADMIN)$> BEGIN
DBA.ADMIN(ADMIN)$>
DBA.ADMIN(ADMIN)$> /* HAPUS TABLE HASIL CLUSTERING */
DBA.ADMIN(ADMIN)$> EXECUTE IMMEDIATE '
DBA.ADMIN(ADMIN)$> DROP TABLE DBB.ADMIN.STG_AP_LOC_KMEANS_OUT;
DBA.ADMIN(ADMIN)$> ';
DBA.ADMIN(ADMIN)$>
DBA.ADMIN(ADMIN)$> /* HAPUS ALL_NMS_DETAIL */
DBA.ADMIN(ADMIN)$> EXECUTE IMMEDIATE '
DBA.ADMIN(ADMIN)$> DROP TABLE DBB.ADMIN.ALL_DETAIL;
DBA.ADMIN(ADMIN)$> ';
DBA.ADMIN(ADMIN)$>
DBA.ADMIN(ADMIN)$> END;
DBA.ADMIN(ADMIN)$>
DBA.ADMIN(ADMIN)$> END_PROC;
CREATE PROCEDURE
DBA.ADMIN(ADMIN)=> \c dbb
You are now connected to database dbb.
DBB.ADMIN(ADMIN)=> call dba.admin.SP_DROP_TMP_TABLE_DBB();
SP_DROP_TMP_TABLE_DBB
-----------------------
(1 row)下面是一些示例屏幕截图,说明如何在Aginity中工作。
以下是预期的跨数据库访问错误的图像。

下面是连接到适当数据库的成功运行的映像。

https://stackoverflow.com/questions/27120680
复制相似问题