求大神给一个例子

qq_39776397 2017-12-26 09:04:13
如何把一个表中几个字段的值按照某个字段和另一个表关联后把值更新到新的这个表中?请大神给个例子叫我写一下 谢谢!
...全文
499 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
WMERP 2017-12-28
  • 打赏
  • 举报
回复
上面是自定义函数 ll_index=f_getfromsql_arrary9(transaction as_trans_sqlca,string as_sql,as_row,as_col,string as_string1[],as_string2[].....,as_string9[]) 动态SQLSELECT取值到字符组,最多9列,自己要更多可以自己修改,指定SQLCA可以实现多数据库查询,as_sql完整SQL语句,as_row 取多少行,0位全部 ,as_col 取多少列的值,最少1列。as_string1[]---as_string9[] 返回数组值。也就是从 as_string1[1] - as_string9[1] 就是对应的字段第一条记录值,后面以此类推。返回值:ll_index 取得记录数,也就是数组数.
WMERP 2017-12-28
  • 打赏
  • 举报
回复
string sqltext_ls,slovo_ls,ls_result,ls_sql,ls_result_all long i,ll_col_type,j,k decimal ld_result,ld_result_all transaction t_report //str_arr_string str_arr_str_tmp f_getfromsql_arrary9 // gstr_arr_str1to9=str_arr_str_tmp t_report=as_trans_sqlca ls_result_all='' ls_sql=as_sql ld_result=0 ld_result_all=0 ll_col_type=0 if as_row<0 then as_row=0 if as_col<1 then as_col=1 if upper(trim(left(ls_sql,6)))<>"SELECT" then return - 1 end if if as_col>9 then return - 2 end if DECLARE p1 DYNAMIC PROCEDURE FOR SQLSA; PREPARE SQLSA FROM :ls_sql using t_report; DESCRIBE SQLSA INTO sqlda ; EXECUTE DYNAMIC p1 USING DESCRIPTOR sqlda ; if t_report.SQLCODE<>0 then return - 3 end if FETCH p1 USING DESCRIPTOR sqlda ; i=0 k=0 DO while t_report.SQLCODE=0 and sqlda.numoutputs>0 k=k+1 if (as_row=0) or (k=as_row) then i=i+1 for j=1 to as_col CHOOSE CASE SQLdA.OutParmType[j] CASE TypeString! if isnull(SQLDA.GetDynamicString(j)) then ls_result=" " else ls_result=SQLDA.GetDynamicString(j) end if CASE TypeInteger!,TypeLong!,TypeDecimal!,TypeDouble! if isnull(SQLDA.getdynamicnumber(j)) then ls_result=" " else ls_result=string(SQLDA.getdynamicnumber(j)) end if case TypeReal!, TypeBoolean! if isnull(SQLDA.getdynamicnumber(j)) then ls_result=" " else ls_result=string(SQLDA.getdynamicnumber(j)) end if case TypeDate! if isnull(SQLDA.GetDynamicDate(j)) then ls_result=" " else ls_result=string(SQLDA.GetDynamicDate(j)) end if case TypeTime! if isnull(SQLDA.GetDynamicTime(j)) then ls_result=" " else ls_result=string(SQLDA.GetDynamicTime(j)) end if case TypeDateTime! if isnull(SQLDA.GetDynamicDateTime(j)) then ls_result=" " else ls_result=string(SQLDA.GetDynamicDateTime(j)) end if CASE ELSE ls_result="UNKOWN DATA" END CHOOSE choose case j case 1 as_string1[i]=ls_result case 2 as_string2[i]=ls_result case 3 as_string3[i]=ls_result case 4 as_string4[i]=ls_result case 5 as_string5[i]=ls_result case 6 as_string6[i]=ls_result case 7 as_string7[i]=ls_result case 8 as_string8[i]=ls_result case 9 as_string9[i]=ls_result end choose next end if FETCH p1 USING DESCRIPTOR sqlda ; LOOP CLOSE p1 ; return i
acen_chen 2017-12-27
  • 打赏
  • 举报
回复
where应该是in吧,估计得用动态sql执行,where条件拼成具体的in ('a','b'...)
qq_39776397 2017-12-27
  • 打赏
  • 举报
回复
引用 9 楼 acen_chen 的回复:
可以呀,问题是没有where条件了吗

额 忘写了这样好像就ok了 但是报了个数据类型不支持 我看了这些数据都是varchar2类型的 只有cksx和ckxx这两个字段是float类型的 问题是出在这两个float类型的数据上吗?怎么处理一下啊
acen_chen 2017-12-27
  • 打赏
  • 举报
回复
可以呀,问题是没有where条件了吗
qq_39776397 2017-12-27
  • 打赏
  • 举报
回复
引用 7 楼 acen_chen 的回复:
数组的话你得循环。。。一句sql能搞定的事情,为什么要搞复杂呢。。。
update tj_zdzdtj set cks= case when bjysf ='>='or bjysf='>' then :ls_cksx when bjysf ='<='or bjysf='<' then :ls_ckxx end 这样写可以吗?主要是bjysf里不止有>,>=,<,<=这几种数据
acen_chen 2017-12-27
  • 打赏
  • 举报
回复
数组的话你得循环。。。一句sql能搞定的事情,为什么要搞复杂呢。。。
qq_39776397 2017-12-27
  • 打赏
  • 举报
回复
引用 5 楼 acen_chen 的回复:
你的代码用case语句就行了
update table
set col1 = case when col2 = '>=' or col2 = '>' then value1 else value2 end
where ....

他们说用数组写 但是好像数组用不了if判断
acen_chen 2017-12-27
  • 打赏
  • 举报
回复
你的代码用case语句就行了 update table set col1 = case when col2 = '>=' or col2 = '>' then value1 else value2 end where ....
qq_39776397 2017-12-27
  • 打赏
  • 举报
回复
引用 3 楼 husonyao 的回复:
这样只能取一个值,如果有多记录的话就处理不到,需要用到数组处理!或者用DATAWINDOW或者DATASTORE来处理
我已经把数据弄在datawindow里了 麻烦教我写一下取值和if判断怎么使用数组 谢谢了
qq_39776397 2017-12-27
  • 打赏
  • 举报
回复
引用 11 楼 acen_chen 的回复:
where应该是in吧,估计得用动态sql执行,where条件拼成具体的in ('a','b'...)
有点不太明白 y要怎么写啊?
jyglint 2017-12-26
  • 打赏
  • 举报
回复
update t1.x1=t2.x2 from t1 inner join t2 on t1.c1=t2.c2 where t1.x1=1
WMERP 2017-12-26
  • 打赏
  • 举报
回复
这样只能取一个值,如果有多记录的话就处理不到,需要用到数组处理!或者用DATAWINDOW或者DATASTORE来处理
qq_39776397 2017-12-26
  • 打赏
  • 举报
回复
大神 我这样写好像娶取不到数据,是不是要用数组存啊?

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧