sqlstr := 'select a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc,sum(c.fsl) '+
'from zy.tzydoctororder a '+
'left join zy.tzynurseorder b '+
'on a.forderid = b.fadviceid '+
'left join ypgl.tzyfymx c '+
'on b.fid=c.fyzid '+
'left join hisbase.tdrugcode d '+
'on c.fypbh=d.fmcode '+
'where c.ffyrq >= to_date(:a1,‘yyyy-mm-dd’) ' +
'and c.ffyrq<= to_date(:a2,‘yyyy-mm-dd’) '+
'and c.fypbh in(:a3) '+
'group by a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc';
ADOQuery1.sql.Add(sqlstr);
DateTimePicker1.Date:=now;
DateTimePicker2.Date:=now;
ADOQuery1.Parameters.ParamByName('a1').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('a2').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker2.Date);
ADOQuery1.Parameters.ParamByName('a3').Value := edit1.Text;
ADOQuery1.Open;
請問這段oracle的sql陳述句怎么拼接,新手一只,除錯了3天沒有搞好。
主要還是日期這個地方很要命!
uj5u.com熱心網友回復:
'where c.ffyrq >= to_date(:a1,''''yyyy-mm-dd''') '這樣試試,你用的是中文的',肯定會報錯的
uj5u.com熱心網友回復:
a215107822不行啊uj5u.com熱心網友回復:
'where c.ffyrq >= to_date(:a1,''yyyy-mm-dd'') '試試這個,字串里面的單引號要寫成兩個。
uj5u.com熱心網友回復:
'where c.ffyrq >= to_date(:a1,''yyyy-mm-dd'') '試試這個,字串里面的單引號要寫成兩個。

uj5u.com熱心網友回復:
除錯一下,將SQL陳述句復制出來,在TOAD或其他程式中運行看看。
另外,確認一下是否如1樓說的,單引號是要英文的,不能是中文的。
uj5u.com熱心網友回復:
還有一點,c.fypbh是什么型別的??如果是字串,那也可能會出問題。uj5u.com熱心網友回復:
先弄個簡單的陳述句試試呀uj5u.com熱心網友回復:
從來都是用float表示時間uj5u.com熱心網友回復:
ADOQuery1.SQL.Clear;sqlstr := 'select * from ( '+
'select a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc,sum(c.fsl) total ' +
'from zy.tzydoctororder a ' +
'left join zy.tzynurseorder b ' +
'on a.forderid = b.fadviceid ' +
'left join ypgl.tzyfymx c ' +
'on b.fid=c.fyzid ' +
'left join hisbase.tdrugcode d ' +
'on c.fypbh=d.fmcode ' +
'where c.ffyrq>=to_date(:a1,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.ffyrq<=to_date(:a2,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.fypbh in(:a3) ' +
'union all ' +
'select a.finputdoctorname,c.fypbh,c.fmc,c.fgg,d.fcj,d.fypjxmc,sum(c.fsl) total ' +
'from zy.tcydoctororder a ' +
'left join zy.tcynurseorder b ' +
'on a.forderid = b.fadviceid ' +
'left join ypgl.tzyfymx c ' +
'on b.fid=c.fyzid ' +
'left join hisbase.tdrugcode d ' +
'on c.fypbh=d.fmcode ' +
' where c.ffyrq>=to_date(:a1,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.ffyrq<=to_date(:a2,'+quotedstr('yyyy-mm-dd')+') ' +
'and c.fypbh in(:a3) ' +
'union all ' +
'select p.fname,e.fypbh,e.fmc,e.fgg,g.fcj,g.fypjxmc,sum(e.fsl) total from ypgl.tmzfymx e left join hisbase.tdrugcode g ' +
'on e.fypbh=g.fmcode ' +
'left join hisbase.tperson p ' +
'on e.fysh=p.ftybh ' +
'where e.ffyrq>=to_date(:a1,'+quotedstr('yyyy-mm-dd')+') ' +
' and e.ffyrq<=to_date(:a2,'+quotedstr('yyyy-mm-dd')+') ' +
' and e.fypbh in(:a3) ' +
') aa '+
'order by aa.fypbh,aa.total desc ';
ADOQuery1.sql.Add(sqlstr);
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text,true);
ADOQuery1.Parameters.ParamByName('a3').Value := edit1.Text;
ADOQuery1.Parameters.ParamByName('a1').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('a2').Value := FormatdateTime('yyyy-mm-dd',DateTimePicker2.Date);
ADOQuery1.ParamCheck := False;
ADOQuery1.Open;
上面的問題解決了,但是這個用了union all后就報引數未正確定義

uj5u.com熱心網友回復:
用meno輸出在pl/sql里面都能正常運行uj5u.com熱心網友回復:
別人說group by會出問題我就去掉了,準備在外面使用轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91731.html
標籤:數據庫相關
上一篇:C++亂數筆記
