南大通用GBase 8a动态执行SQL里的数据如何返回调用方

本文介绍GBase 8a的实现从动态执行的SQL里,用session变量来返回数据的方法。

session变量

用@开头的变量,是session级的变量,只有当前session可见。可以规避并发冲突。

动态SQL代码

如下SQL是样例,一般都是concat拼装的,所以只能动态执行,其中需要返回的数据通过@out_str返回。

@str=concat('select now() into @out_str from ',v_table_name,' limit 1');

存储过程样例

drop procedure if exists p_test;
delimiter //
create procedure p_test()
begin
    DECLARE v_sql_string varchar(1000);
    set v_sql_string =  'select now() into @out_str';

    set @sql_str_exec = v_sql_string;
    prepare stmt_exesql from @sql_str_exec;
    execute stmt_exesql;
    select @out_str;
end//
delimiter ;
call p_test();
select @out_str;