我netezza的新手(运行版本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 DB中创建的SP" A")中调用它
但是当我打电话给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
答案 0 :(得分:1)
无法从 DBA 执行写入 DBB 的数据库或数据库目录的操作,这包括DROP TABLE。
运行此命令并成功时:
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的存储过程,但DBA中的SP必须在连接到DBB时被调用。
例如:
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中工作的示例截图。
以下是预期的跨数据库访问错误的图像。
这是连接到相应数据库的成功运行的图像。