在 IBM netezza SQL 数据库中运行存储过程的错误
Posted
技术标签:
【中文标题】在 IBM netezza SQL 数据库中运行存储过程的错误【英文标题】:error of running a stored proceudre in IBM netezza SQL database 【发布时间】: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
任何帮助将不胜感激!
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于在 IBM netezza SQL 数据库中运行存储过程的错误的主要内容,如果未能解决你的问题,请参考以下文章
由于日期格式,将数据从 txt 文件导入 IBM netezza SQL 数据库时出错
如何安排 sql 脚本并将数据导出到 IBM Netezza 中的特定位置
如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?
如何从 Aginity 工作台检查在 IBM Netezza SQL 中创建表的数据和时间