【问题标题】:error of running a stored proceudre in IBM netezza SQL database在 IBM netezza SQL 数据库中运行存储过程的错误
【发布时间】:2015-01-13 16:11:31
【问题描述】:

我需要通过 IBM Aginity 工作台在 IBM netezza SQL 数据库中创建一个存储过程。

这是我创建 SP 的 SQL 代码:

CREATE OR REPLACE PROCEDURE "SP_drop_a_table_if_exists"(varchar(128))
RETURNS boolean
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
declare
    oname alias for $1;
    o record;
begin
    select otype into o
from (
     select 'TABLE' otype from _v_table where tablename = upper(oname)
    union all
    select 'VIEW' otype from _v_view where viewname = upper(oname)
 ) x;

 if found then
    execute immediate 'DROP '||o.otype||' '||oname;
 end if;
end;
END_PROC;

我创建成功。

但是,当我运行它时,

   CALL SP_drop_a_table_if_exists('test_a_table':: varchar(128))

我收到错误:

 ERROR[42S02] error: function 'sp_drop_a_table_if_exists(varchar)' does not exists
 unable to identify a function that satisdy the given argument types
 you may need to add explicit typecasts

任何帮助将不胜感激!

【问题讨论】:

    标签: sql stored-procedures netezza


    【解决方案1】:

    您创建的存储过程在双引号内混合大小写...

    CREATE OR REPLACE PROCEDURE "SP_drop_a_table_if_exists"(varchar(128))
    

    ...但是当您调用存储过程时,您不使用双引号,因此名称将全部转换为大写。

    CALL SP_drop_a_table_if_exists('test_a_table':: varchar(128))
    

    试试这个:

    CALL "SP_drop_a_table_if_exists"('test_a_table':: varchar(128))

    我还应该提到,最新版本的 NPS 支持 DROP TABLE 命令的这种语法:

    DROP TABLE TABLENAME IF EXISTS;
    

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多