首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据库中运行存储过程时出错

在数据库中运行存储过程时出错
EN

Stack Overflow用户
提问于 2015-01-13 16:11:31
回答 1查看 768关注 0票数 0

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

这是我创建SP的SQL代码:

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

我成功地创造了。

但是,当我运行它时,

代码语言:javascript
复制
   CALL SP_drop_a_table_if_exists('test_a_table':: varchar(128))

我有错误:

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

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-14 02:05:45

你在双引号里面用混合大小写创建了你的存储过程.

代码语言:javascript
复制
CREATE OR REPLACE PROCEDURE "SP_drop_a_table_if_exists"(varchar(128))

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

代码语言:javascript
复制
CALL SP_drop_a_table_if_exists('test_a_table':: varchar(128))

试一试:

调用"SP_drop_a_table_if_exists"('test_a_table'::varchar(128))

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

代码语言:javascript
复制
DROP TABLE TABLENAME IF EXISTS;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27926479

复制
相关文章

相似问题

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