毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 数据库 >> 正文

DB2如何动态SQL 获取返回值

更新时间:2013-1-22:  来源:毕业论文

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;

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。