运行 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;
我需要在 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;