楼主: QYL

关于存储过程中动态sql使用邦定变量的问题

[复制链接]
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
11#
发表于 2005-3-4 14:31 | 只看该作者
呵呵,感觉execute immediate vsql using .....中的using ....需要动态变化

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
12#
发表于 2005-3-4 14:53 | 只看该作者
如果是java,试试使用下面的代码:
/*
author : created by husthxd
purpose : dynamic sql using bind var
*/
    public void testGetDate() throws Exception {
        //保存sql语句
        StringBuffer sbSql = new StringBuffer();
        //select子句
        sbSql.append("select * from GK_ZJZFSQ where 0 = 0";
        //map保存需要动态构造条件的字段名称和数值
        HashMap map = new HashMap();
        map.put("GK_ZJSQS_ID",Integer.valueOf("1");
        //map.put("column2","value2";
        //获取Key值集
        Set keySet = map.keySet();
        //构造sql
        for(Iterator itor = keySet.iterator();itor.hasNext()
        {
            sbSql.append(" and ";
            sbSql.append(itor.next());
            sbSql.append(" = ? ";
        }        
        System.out.println(sbSql);
        //在pstmt中设置参数
        PreparedStatement pstmt = null;
        Connection conn = ConnMgr.getConnection();
        //创建pstmt
        pstmt = conn.prepareStatement(sbSql.toString());
        int i = 1;
        for(Iterator itor = keySet.iterator();itor.hasNext();i++)
        {
            //设置参数
            pstmt.setObject(i,map.get(itor.next()));
        }
        //获取结果集
        ResultSet rs = pstmt.executeQuery();
        while(rs.next())
        {
            System.out.println("ID = "+rs.getString(1));
        }
        //关闭资源
        pstmt.close();
        rs.close();
        ConnMgr.closeConnection(conn);

    }

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
13#
 楼主| 发表于 2005-3-4 16:01 | 只看该作者
Expert one-on-one Oracle 第684-689页讲的就是类似这样的问题。是英文版还是中文版的。我在里边都没有看到这个

使用道具 举报

回复
论坛徽章:
10
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:科特迪瓦
日期:2010-04-15 12:20:472010年世界杯参赛球队:智利
日期:2010-04-13 17:15:21生肖徽章2007版:蛇
日期:2009-09-24 13:54:11生肖徽章2007版:龙
日期:2009-09-22 13:56:012009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:龙
日期:2009-02-10 13:45:15生肖徽章2007版:狗
日期:2009-02-03 13:53:34会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
14#
发表于 2005-3-4 16:12 | 只看该作者
当然是指中文版的,我没有英文版的,英文的HTML文件上面没有页码,章节是16.3.3 DBMS_SQL与本地动态SQL 1. 绑定变量。

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
15#
发表于 2005-3-4 16:13 | 只看该作者
最初由 QYL 发布
[B]Expert one-on-one Oracle 第684-689页讲的就是类似这样的问题。是英文版还是中文版的。我在里边都没有看到这个 [/B]


中文的。

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
16#
 楼主| 发表于 2005-3-4 16:57 | 只看该作者
好的。谢谢

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
17#
发表于 2005-3-9 18:40 | 只看该作者
看过了,确实能解决问题。谢谢!

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
18#
 楼主| 发表于 2005-3-10 09:25 | 只看该作者
使用dbms_sql能处理,但是,呵呵,还没有完全看完

使用道具 举报

回复
论坛徽章:
3
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
19#
 楼主| 发表于 2005-3-10 09:48 | 只看该作者
如果谁看过了,给写一个例子,这样大家都会看到。并利用。

使用道具 举报

回复
论坛徽章:
46
奥运会纪念徽章:现代五项
日期:2008-10-24 13:26:49奥运会纪念徽章:摔跤
日期:2012-07-23 15:26:57复活蛋
日期:2012-11-19 11:58:05灰彻蛋
日期:2012-12-06 14:47:452013年新春福章
日期:2013-02-25 14:51:24保时捷
日期:2013-08-26 09:19:31奔驰
日期:2013-10-08 15:46:342014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有对象
日期:2014-04-02 10:53:11
20#
发表于 2005-3-10 18:40 | 只看该作者
条件总数是固定的吗?如果是的话用静态的sql完全可以处理你的问题
页面上可能有值的变量有3个a,b,c 这3个都可能为空,为空的情况下部作为查询条件,下面的where可以实现这个要求
where (:a is null or cola=:a) and (:b is null or colb=:b) and (:c is null or colc=:c)

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表