当前位置: 代码迷 >> PB >> of_max函数解决方法
  详细解决方案

of_max函数解决方法

热度:108   发布时间:2016-04-29 07:42:30.0
of_max函数
变量 string tabname 
     string  colname
long ll_max
string table_name
select max(colname)
into :ll_max
from tab_name = :tabname;
return ll_max
这么写有什么问题吗
------解决方案--------------------
string tabname  
string colname
long ll_max

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
string sqlstatement
sqlstatement = "SELECT max("+colname+") FROM "+tabname
PREPARE SQLSA FROM :sqlstatement ;
OPEN DYNAMIC my_cursor;
FETCH my_cursor INTO :ll_max;
CLOSE my_cursor ;
------解决方案--------------------
1.用动态SQL,具体做法就是3楼朋友说的那样
2.动态创建数据窗口或者数据存储,下面以数据存储为例说明:
(1)新建一个datastore的userobject:New->PB Object->Standard Class->datastore
(2)自定义函数integer of_create(string as_sql),函数体如下:
string ls_error,ls_syntax

sqlca.AutoCommit=True
ls_syntax=sqlca.syntaxfromsql(ls_sql,"",ls_error)
if this.create(ls_syntax) = -1 then
msg('数据存储创建失败!'+sqlca.sqlerrtext)
sqlca.AutoCommit=False
return -1
end if
sqlca.AutoCommit=False
this.settransobject(sqlca)
return this.retrieve()
这里的事务使用的sqlca,你可以根据实际情况使用不同的事务,重载函数,然后事务作为参数传进来就可以了
(3)保存该对象,名称uo_datastore
(4)使用举例:
string ls_sql
long ll_max
uo_datastore lds_max

ls_sql="select max("+ls_colname+") as colname from "+ls_tablename
if lds_max.of_create(ls_sql)=-1 then
    destroy lds_max
    return
end if
if lds_max.rowcount()>0 then
    ll_max=lds_max.getitemnumer(1,'colname')
end if
destroy lds_max
  相关解决方案