GBase 8s
其他
问答

GBase8S 数据库如何执行 返回多条语句的动态sql?

发表于2024-07-30 14:37:41290次浏览12个评论

define v_sql varchar(2000)
let v_sql='select * from 表名'

我定义了这一个变量,如何执行 返回多条语句的动态sql??

execute IMMEDIATE  执行一行的,不适合。

有没有好心人能给一个例子

评论

登录后才可以发表评论
老三发表于 2年前
create procedure cursorTest(id integer) returning integer,varchar(4096);
define v_sqlstr varchar(250);
define v_tabid integer;
define v_tabname varchar(4096);

let v_sqlstr = "select tabid,tabname from systables where tabid < ?";
prepare stmt from v_sqlstr;

declare v_cursor cursor for stmt;
open v_cursor using id;
while(1 = 1)
fetch v_cursor into v_tabid,v_tabname;
if( SQLCODE != 100) then return v_tabid,v_tabname with resume;
else exit;
end if
end while close v_cursor;

free v_cursor;
free stmt;
end procedure;
最佳回答
GBase用户17529发表于 2年前
@老三:感谢三哥的帮助,不过我这边跑起来报错了,但是大概示列内容我大概读懂了,这边sql语句 select tabid,tabname from systables 是提前把要查出来的tabid,tabname定义出来了, 那如果每次都是*呢,语句是select * from 表,列名也不是固定的。那这种的怎么查呀?
GBase用户17529发表于 2年前
@老三:谢谢三哥,但是我这边执行报错了
GBase用户17529发表于 2年前
@老三:谢谢三哥,这个sp我这边运行报错
GBase用户17529发表于 2年前
@GBase用户17529:顺带请教您个问题,这个sp大概意思我看懂了,您提供的demo sql 是 select tabid,tabname from systables,列名提前列出来了,而且还定义了变量来处理, 但如果我的sql 语句是 select * from 表(动态表),列名也不确定的话,这个怎么改?
用户头像
liaosnet发表于 2年前
@GBase用户17529:gbase模式下,需要显式的列名。
GBase用户17529发表于 2年前
@liaosnet:那我是不是只能用oracle 兼容模式去写了...
GBase用户24232发表于 1年前
@GBase用户17529:你好,最终怎么解决的select *
崔哥发表于 5个月前
侧寒斜雨,微灯薄雾,匆匆过了元宵。帘影护风,盆池见日,青青柳叶柔条。碧草皱裙腰。正昼长烟暖,蜂困莺娇。望处凄迷,半篙绿水浸斜桥。孙郎病酒无聊。记乌丝醉语,碧玉风标。新燕又双,兰心渐吐,嘉期趁取花朝。心事转迢迢。但梦随人远,心与山遥。误了芳音,小窗斜日对芭蕉。
白芷发表于 2个月前
蹲个答案。
GBase用户51848发表于 2个月前
不清楚啊。
GBase用户51820发表于 2个月前
围观了。