GBase 8s
适配迁移
问答

存储过程中的sql

发表于2024-11-25 14:27:1877次浏览7个评论

下面的存储过程中的sql为什么单独可以执行,放到存储过程里面就不能执行了?

--创建表
create table demo(id int,name varchar(20),quarter int,nums int,amunt_sold decimal(8,2)); 
insert into demo values(1, 'a',1, 1000,200); 
insert into demo values(2, 'a',2, 2000,100.12); 
insert into demo values(3, 'a',3, 4000,156); 
insert into demo values(4, 'b',1, 5000,234); 
insert into demo values(5, 'b',3, 3000,345); 
insert into demo values(6, 'c',3, 3500,222); 
insert into demo values(7, 'd',1, 4200,111); 
insert into demo values(8, 'd',2, 5500,555);

--创建存储过程
DROP PROCEDURE IF EXISTS mtest;
create procedure mtest()
RETURNS set(row(x varchar(8000),a varchar(8000),b varchar(8000),c varchar(8000),d varchar(8000)) NOT null);
define sql2 set(row(x varchar(8000),a varchar(8000),b varchar(8000),c varchar(8000),d varchar(8000)) NOT null);
INSERT INTO table(sql2)  
select * from (select name,nums,id from demo) 
PIVOT (sum(nums) for name 
in('a','b','c','d'));
RETURN sql2;
END PROCEDURE;

--调用
CALL mtest();

评论

登录后才可以发表评论
用户头像
liaosnet发表于 1年前
行转列函数pivot参考:https://www.gbase.cn/community/post/4461
GBase用户24232发表于 1年前
@liaosnet:我的是满足语法规范的,为什么报错?
用户头像
liaosnet发表于 1年前
报什么错误的?
GBase用户24232发表于 1年前
@liaosnet:在创建存储过程时报错:SQL 错误 [ErrorCode : -721] [SQLState : IX000] : SPL 例程 (gbasedbt.mtest) 不再有效。
用户头像
liaosnet发表于 1年前
@GBase用户24232:你碰到了一个限制,row/list类型的的长度不能超过32K,你这里是40K了。。。
改小点吧。看着用varchar(2000)就好了。
最佳回答
GBase用户24232发表于 1年前
@liaosnet:嗯嗯好,谢谢
曾云林发表于 2个月前
学习下。