GBase 8s
适配迁移
问答
在DataStudio工具创建测试函数成功,sql创建函数复制到sql中执行失败,创建函数如何创建?
发表于2026-01-16 10:59:32163次浏览20个评论
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【GBase版本】:Gbase8sV8.8_3.6.3
【操作系统】:银河麒麟
【CPU】:英特尔
【问题描述】*:
数据库工具中点击创建函数提供的测试函数保存成功,但是用sql复制到执行窗口执行报错,是有啥限制么?我如何用sql创建自定义函数,语法规则是什么?


评论
登录后才可以发表评论
GBase用户28017发表于 6个月前
查看一下官方文档。
GBase用户28017发表于 6个月前
成功了吗?
小鱼不吐泡泡发表于 6个月前
选择oracle模式的话应该按照oracle的使用习惯走,这么写,能正常执行
create or replace function test(c in number) return number
is
begin
return 100;
end;
/
create or replace function test(c in number) return number
is
begin
return 100;
end;
/
GBase用户28017发表于 6个月前
可以了吗
GBase用户28017发表于 6个月前
好用了吗?
笙歌发表于 6个月前
@GBase用户28017:再工具中函数下,手动创建函数,复制代码可以,但是在新建查询窗口新建函数还是不行的

欣禾发表于 6个月前
可以尝试下这个格式,服务器版本:GBase8sV8.8_TL_3.6.3_3X2_1_783c8d,客户端win10:GBaseDataStudio_8.5.24.0
DROP FUNCTION IF EXISTS read_address ;
DELIMITER $$
CREATE FUNCTION read_address(val VARCHAR)
RETURN VARCHAR
as
v_res varchar;
begin
v_res := CONCAT(val, '!!!');
return v_res;
END;
DELIMITER $$
CALL gbasedbt.read_address('hello');
官方参考文档:https://www.gbase.cn/docs/gbase-8s/05%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91/03%20SQL%E6%8C%87%E5%8D%97%E8%AF%AD%E6%B3%95/03%20SPL%E8%BF%87%E7%A8%8B%E8%AF%AD%E5%8F%A5
DROP FUNCTION IF EXISTS read_address ;
DELIMITER $$
CREATE FUNCTION read_address(val VARCHAR)
RETURN VARCHAR
as
v_res varchar;
begin
v_res := CONCAT(val, '!!!');
return v_res;
END;
DELIMITER $$
CALL gbasedbt.read_address('hello');
官方参考文档:https://www.gbase.cn/docs/gbase-8s/05%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91/03%20SQL%E6%8C%87%E5%8D%97%E8%AF%AD%E6%B3%95/03%20SPL%E8%BF%87%E7%A8%8B%E8%AF%AD%E5%8F%A5
mittens发表于 6个月前
学习了
mittens发表于 6个月前
学习一下
笙歌发表于 6个月前
执行时
delimiter %%
函数或者存储过程
%%
delimiter
delimiter %%
函数或者存储过程
%%
delimiter
GBase用户11306发表于 5个月前
@笙歌:是的,执行存储过程/函数 的时候,需要在其前后加上“定义语句分隔符”。
我试验了一下,加上分隔符定义后可以执行的。
我试验了一下,加上分隔符定义后可以执行的。

GBase用户11306发表于 5个月前
@笙歌:客户端应该是按分号截断执行了,只执行到第一个分号的语句就报错语法错了。
create
or replace function test (c in number) return number is begin return 100;
create
or replace function test (c in number) return number is begin return 100;
GBase用户11306发表于 5个月前
我试验了一下,执行存储过程/函数时,需要在前后加上 分隔符的定义。
delimiter %%
create
or replace function test (c in number) return number is begin return 100;
end;
%%
我是这么写的,可以执行成功。
delimiter %%
create
or replace function test (c in number) return number is begin return 100;
end;
%%
我是这么写的,可以执行成功。

最佳回答
GBase用户11306发表于 5个月前
@GBase用户11306:delimiter /
create
or replace function test (c in number) return number is begin return 100;
end;
/
这样也管用
create
or replace function test (c in number) return number is begin return 100;
end;
/
这样也管用
热门帖子
- 12025-12-01浏览数:182764
- 22023-05-09浏览数:25062
- 42023-09-25浏览数:18526
- 52020-05-11浏览数:17529

