我需要从IBM工作台在数据库中创建一个存储过程。
这是我创建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任何帮助都将不胜感激!
发布于 2015-01-14 02:05:45
你在双引号里面用混合大小写创建了你的存储过程.
CREATE OR REPLACE PROCEDURE "SP_drop_a_table_if_exists"(varchar(128))...but当您调用存储过程时,您不使用双引号,因此名称将被转换为大写。
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命令的这种语法:
DROP TABLE TABLENAME IF EXISTS;https://stackoverflow.com/questions/27926479
复制相似问题