论坛首页 综合技术论坛

动态SQL

浏览 3021 次
锁定老帖子 主题:动态SQL
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-23   最后修改:2010-10-29

1。有时候静态SQL很笨,很木馁,
例如:
temp_str 是变量=chr(39) || first_str || ''',''' || mid_number || chr(39);

 temp_str 的值应该为'A123','A23e'

侧执行下面的静态SQL却达不到实际的效果(select rwt.serial_number , rst.lot_no , from  rst,  rwt where rwt.serial_number in ('A123','A23e'))不会执行 下面的SQL

select rwt.serial_number ,
rst.lot_no ,
from  rst,  rwt
where rwt.serial_number in (temp_str )

2。解决以上的办法只有 用动态SQL:

     在含有 存储过程的包中 定义游标

create or replace package SMT_user_package is

 type H_Numbers is ref cursor;
 procedure Get_Lot_Number(v_serial_sn in varchar2,
                         
                         Lot_numbers out H_Numbers)

存储过程中的SQL

temp_str 是变量=chr(39) || first_str || ''',''' || mid_number || chr(39);

string s_sql;

        s_sql='select rwt.serial_number ,
                                rst.lot_no ,
                     from  rst,  rwt 
                     where rwt.serial_number in ('||temp_str ||')'

open  Lot_numbers for s_sql;

 侧执行上面的SQL字符串到达实际的效果(select rwt.serial_number , rst.lot_no , from  rst,  rwt where rwt.serial_number in ('A123','A23e')

   发表时间:2008-04-23  
既然是存储过程,当temp_str的值有很多的时候,
可以考虑把temp_str的值插入临时表
这样检索依据就成为以下形式,

select 
    rwt.serial_number , 
    rst.lot_no , 
from  rst,  rwt 
inner join temp_table x on
    rwt.serial_number = x.temp_str


0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics