2014-11-25 113 views
1

我在Netezza公司新受(运行版本Netezza公司发布7.1.0.1-P1 [构建37788]),我有2个数据库:不能在过程Netezza公司DROP TABLE跨数据库

  1. DB “A”
  2. DB “B”
在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()是用于删除一个LL TMP表在DB “B”,但我需要从DB “A” 调用此

但(在DB 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

回答

1

操作是写入数据库或数据库目录DBB不能从DBA执行,这包括DROP TABLE。

当您运行此命令并且取得了成功:

DROP TABLE DBB.USR3.STG_AP_LOC_KMEANS_OUT; 

那么我相信你一定不能连接到DBA

您是否正在运行来自Aginity,NZSQL或其他工具的测试命令?

以下是系统应如何运作。

[[email protected] ~]$ 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工作的一些样本截图。

以下是预期的跨数据库访问错误的图像。

enter image description here

这里是连接到相应的数据库的成功运行的图像。

enter image description here

+0

我从aginity .... – ihsansat 2014-11-25 18:14:54

+0

好运行。有时可能很容易混淆关于您在Aginity中连接到哪个数据库的问题。如果连接到DBA,则DBB中的表的DROP不应该是可能的。您可以在Aginity的SQL查询窗口上方的数据库下拉列表中验证您连接的数据库。 – ScottMcG 2014-11-25 18:20:06

+0

哇.. Sp我不能在数据库“B”中使用数据库“A”中的SP删除表格吗?它为什么发展? Thx – ihsansat 2014-11-25 18:23:44