运行 IBM netezza SQL 数据库中的存储过程错误

error of running a stored proceudre in IBM netezza SQL database

我需要在 IBM Aginity workbench 的 IBM netezza SQL 数据库中创建一个存储过程。

这是我的 SQL 创建 SP 的代码:

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 ;
    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

如有任何帮助,我们将不胜感激!

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

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;