您的位置:首页 > 数据库

分解pb的数据管道语法,加入自己的SQL,灵活使用数据管道

2005-02-18 17:15 537 查看
分解pb的数据管道语法,加入自己的SQL,灵活使用数据管道
pb的数据管道具有非常灵活的导入导出功能。
但他自带的retrieve,只可以加入固定的参数,
那么如何灵活的加入自己的SQL呢?
如下:
pb9+sql2k
首先建立u_pipeline对象,加入常用的start函数,如果使用过pb的数据管道就
不在这累您的眼睛了。
直入主题:
首先分析数据管道p_catalog的语法:
u_pipeline.dataobject=“p_catalog“
语法如下:
PIPELINE(source_connect=drms,destination_connect=access,type=replace,commit=100,errors=100,keyname="BookCatalog_x")
SOURCE(name="BookCatalog",COLUMN(type=decimal,name="CATLId",dbtype="decimal(20,0)",key=yes,nulls_allowed=no)
 COLUMN(type=decimal,name="RID",dbtype="decimal(18,0)",nulls_allowed=yes)
 COLUMN(type=varchar,name="Book_Id",dbtype="varchar(20)",nulls_allowed=no)
 COLUMN(type=decimal,name="Series_No",dbtype="decimal(4,0)",nulls_allowed=no)
 COLUMN(type=varchar,name="Chapter_No",dbtype="varchar(20)",nulls_allowed=no)
 COLUMN(type=varchar,name="Chapter_name",dbtype="varchar(100)",nulls_allowed=no)
 COLUMN(type=decimal,name="Page_Number",dbtype="decimal(4,0)",nulls_allowed=no))
RETRIEVE(statement="PBSELECT( VERSION(400) TABLE(NAME=~"BookCatalog~" )
COLUMN(NAME=~"BookCatalog.CATLId~")
COLUMN(NAME=~"BookCatalog.RID~")
COLUMN(NAME=~"BookCatalog.Book_Id~")
COLUMN(NAME=~"BookCatalog.Series_No~")
COLUMN(NAME=~"BookCatalog.Chapter_No~")
COLUMN(NAME=~"BookCatalog.Chapter_name~")
COLUMN(NAME=~"BookCatalog.Page_Number~")
//注意这部分是我们要加入自己的SQL的地方

) ")

DESTINATION(name="BookCatalog",COLUMN(type=double,name="CATLId",dbtype="DOUBLE",key=yes,nulls_allowed=no,initial_value="0")
 COLUMN(type=double,name="RID",dbtype="DOUBLE",nulls_allowed=yes)
 COLUMN(type=varchar,name="Book_Id",dbtype="VARCHAR(20)",nulls_allowed=no,initial_value="spaces")
 COLUMN(type=double,name="Series_No",dbtype="DOUBLE",nulls_allowed=no,initial_value="0")
 COLUMN(type=varchar,name="Chapter_No",dbtype="VARCHAR(20)",nulls_allowed=no,initial_value="spaces")
 COLUMN(type=varchar,name="Chapter_name",dbtype="VARCHAR(100)",nulls_allowed=no,initial_value="spaces")
 COLUMN(type=double,name="Page_Number",dbtype="DOUBLE",nulls_allowed=no,initial_value="0"))

建立函数:wf_getsql_syntax
将以上得到语法赋给
a_sql=u_pipeline.syntax传给函数,
a_sou_tabname为传入的表名可以根据自己的需要改变
a_no为传入的的单号,可以根据自己的需要改变
/函数名 String wf_getsql_syntax(String a_sql,String a_sou_tabname,String a_no)
//a_sql 出入的数据管道的语法  a_sql = pipe.syntax
//a_sou_tabname 要导出的源表名
//a_no 出库单的相关单号
//返回语法 pipe.syntax  ls_start+ls_where+ls_end
//作者:林凤孙
String ls_tab_name  , ls_col_name //表名和字段名
//列子
//订购单
if upper(left(a_no,3))="DGD" then
 ls_tab_name="BookOrderList"
 ls_col_name="BodmId"
end if

String ls_start , ls_end , ls_where
long ll_s_pos

ll_s_pos = pos(a_sql,"DESTINATION")
ls_start = mid(a_sql,1,ll_s_pos - 7)
ls_end =  mid(a_sql,ll_s_pos - 6)

ls_where="WHERE(    EXP1 =~~~""+a_sou_tabname+".RID~~~"   OP =~~~"in~~~""+&
+"NEST = PBSELECT( VERSION(400) TABLE(NAME=~~~""+ls_tab_name+"~~~" )"+&
+"COLUMN(NAME=~~~""+ls_tab_name+".RID~~~")"+&
+"WHERE(    EXP1 =~~~""+ls_tab_name+"."+ls_col_name+"~~~"   OP =~~~"=~~~""+&
+"    EXP2 =~~~"'"+a_no+"'~~~" ) ))"
//返回语法
// pipe.syntax  = a_sql
return ls_start+ls_where+ls_end

函数结束

执行函数后上面蓝体字就加入了ls_where这部分SQL。
实际SQL为:
select rid,...* from BookCatalog
where rid in(select rid where BookOrderList where BodmId ='DGD-2005-02-02-00003')
加入的即是:where rid in(select rid where BookOrderList where BodmId ='DGD-2005-02-02-00003')
从而实现了灵活控制pb的数据管道pipeline的目的。
多动手,一切ok!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


MSN:gutengcom@hotmail.com
QQ:28588260
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql string table access qq
相关文章推荐