DB2如何动态SQL 获取返回值
因为查询的表名,及表ID未知,所以决定实用动态SQL:
DECLARE V_TABNAME VARCHAR(20);
DECLARE V_TABID VARCHAR(20);
DECLARE V_SQL VARCHAR(200);
DECLARE V_RESULT VARCHAR(40) DEFAULT '';
SET V_TABNAME = 'MERGE_TAB_FROM';
SET V_TABID = '1';
SET V_SQL = 'SELECT M_NAME FROM INTO V_RESULT ' || V_TABNAME || ' WHERE M_ID = ' || '''' || V_TABID || '''';
PREPARE S FROM V_SQL; --
EXECUTE S; --
但是报206错误。
如何获取M_NAME的值?
貌似不能直接取到,打开游标 OR 直接将结果插入表中保存
SET V_SQL = 'SELECT M_NAME FROM INTO V_RESULT ' || V_TABNAME || ' WHERE M_ID = ' || '''' || V_TABID || ''''; --这句话对吗? --你这个sql应该是这样的 select m_name into v_result from v_tabname where m_id = v_tabid
DB2在这个方面是不灵活的,自己手动来写。
最终问题解决,方法:使用动态语句将查询到的数据插入临时表中,再从临时表中取到相应的数据。
代码如下:
DECLARE V_TABNAME VARCHAR(20); DECLARE V_TABID VARCHAR(20); DECLARE V_SQL VARCHAR(200); DECLARE V_RESULT VARCHAR(40) DEFAULT ''; DECLARE GLOBAL TEMPORARY TABLE SESSION.DATA_TMP ( TAB_NAME VARCHAR(20), TAB_ID VARCHAR(20), M_NAME VARCHAR(50) ) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED ; SET V_TABNAME = 'MERGE_TAB_FROM'; SET V_TABID = '1'; --将数据插入临时表 SET V_SQL = 'INSERT INTO SESSION.DATA_TMP (TAB_NAME, TAB_ID, M_NAME) SELECT ''' || V_TABNAME || ''',''' || V_TABID || ''', M_NAME FROM ' || V_TABNAME || ' WHERE M_ID = ' || '''' || V_TABID || ''''; PREPARE S FROM V_SQL; -- EXECUTE S; -- --从临时表中取数据 SELECT M_NAME INTO V_RESULT FROM SESSION.DATA_TMP WHERE TAB_NAME = V_TABNAME AND TAB_ID = V_TABID;