首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能在过程Netezza中删除表交叉数据库

不能在过程Netezza中删除表交叉数据库
EN

Stack Overflow用户
提问于 2014-11-25 07:10:23
回答 1查看 1.3K关注 0票数 1

我在netezza (运行版本7.1.0.1-P1 Build 37788)中的新手,我有2个数据库:

  1. DB "A“
  2. "B“

在DB "A“中,我有过程SP_DROP_TMP_TABLE_DBB()

代码语言:javascript
复制
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“时

代码语言:javascript
复制
CALL SP_DROP_TMP_TABLE_DBB()

结果是:

代码语言:javascript
复制
ERROR:  Cross Database Access not supported for this type of command

然而,当我在DB"A“上运行手动查询时:

代码语言:javascript
复制
DROP TABLE DBB.USR3.STG_AP_LOC_KMEANS_OUT;

起作用了

我不明白为什么会发生,也许你有建议帮我

Thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-25 17:42:44

不能从DBA执行写入DBB的数据库或数据库目录的操作,这包括删除表。

当您运行此命令并成功执行时:

代码语言:javascript
复制
DROP TABLE DBB.USR3.STG_AP_LOC_KMEANS_OUT;

那么我必须相信,你不能依附于DBA。

您是从Aginity、NZSQL或其他工具运行测试命令吗?

以下是系统的行为方式。

代码语言:javascript
复制
[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。

例如:

代码语言:javascript
复制
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中工作。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27120680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档