TQuery如何调用Oracle中带传出参数的存储过程? ( 积分: 300 )

  • 主题发起人 主题发起人 kite20020304
  • 开始时间 开始时间
K

kite20020304

Unregistered / Unconfirmed
GUEST, unregistred user!
以下面的过程为例:<br>create&nbsp;or&nbsp;replace&nbsp;procedure&nbsp;p_Test&nbsp;(<br>pi_sA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VARCHAR2,<br>po_sA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT&nbsp;VARCHAR2<br>)<br>is<br>begin<br>&nbsp;&nbsp;po_sA&nbsp;:=&nbsp;pi_sA||'&gt;&nbsp;'||TO_CHAR(SYSDATE,&nbsp;'YYYYMMDD');<br>end&nbsp;p_Test;
 
一定要用TQUERY吗?<br>用StoredProc1控件不是更方便吗?只要将参数对应值给它不就可以了
 
StoredProc无法调用Package中的过程!
 
用sql语句调<br>query.add('exec&nbsp;p_Test&nbsp;...')
 
to&nbsp;加油+加油:<br>&nbsp;&nbsp;&nbsp;query.add('exec&nbsp;p_Test&nbsp;...')&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;关键是将后面的...写出来
 
query.add('&nbsp;exec&nbsp;p_Test&nbsp;'&nbsp;+&nbsp;''''&nbsp;+&nbsp;参数1&nbsp;+&nbsp;''','''&nbsp;+&nbsp;参数2&nbsp;+&nbsp;'''')
 
to&nbsp;lovedesky:<br>&nbsp;&nbsp;!传出参数&nbsp;po_sA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT&nbsp;VARCHAR2
 
query.add('Begin');<br>query.add('p_Test&nbsp;(:A,:B);');<br>query.add('end;');
 
to&nbsp;ks_reny:<br>&nbsp;&nbsp;这种方法我已经试过,出错!提示<br>&nbsp;&nbsp;Query1:&nbsp;Field&nbsp;'p2'&nbsp;is&nbsp;of&nbsp;an&nbsp;unknown&nbsp;type
 
SQL.Add('&nbsp;p_Test(:p1,:p2);');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;END;');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[0].AsString&nbsp;:=&nbsp;Edit1.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prepare;<br>对参数:p2&nbsp;赋个值&nbsp;&nbsp;Params[1].AsString&nbsp;:=&nbsp;Edit2.Text;
 
!传出参数
 
是传出!<br>你这样赋一下Params[1].AsString&nbsp;:=&nbsp;Edit2.Text;<br>不是就确定了你的参数P2是什么类型了吗?<br>既然传出,你传个值进去也没关系,还是被覆盖的。
 
to&nbsp;银雨辰:<br>&nbsp;&nbsp;&nbsp;能执行,但返回结果与预期不符<br><br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;Query1&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;BEGIN');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;p_Test(:p1,:p2);');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;END;');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[0].AsString&nbsp;:=&nbsp;Edit1.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[1].AsString&nbsp;:=&nbsp;Edit2.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prepare;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(Params[1].AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:Exception&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(E.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;
 
SQL.Add('&nbsp;p_Test(:p1,:p2&nbsp;OUTPUT);');
 
try<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;Query1&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;BEGIN');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;p_Test(:p1,:p2&nbsp;OUTPUT);');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;END;');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[0].AsString&nbsp;:=&nbsp;Edit1.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[1].AsString&nbsp;:=&nbsp;Edit2.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prepare;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;&nbsp;//执行出错<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(Params[1].AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:Exception&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(E.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br><br>!!!提示如下错误<br>General&nbsp;SQL&nbsp;error.<br>ORA-06550:&nbsp;line&nbsp;3,&nbsp;column&nbsp;17:<br>PLS-00103:&nbsp;Encountered&nbsp;the&nbsp;symbol&nbsp;&quot;OUTPUT&quot;&nbsp;when&nbsp;expecting&nbsp;one&nbsp;of&nbsp;the&nbsp;following:<br><br>&nbsp;&nbsp;&nbsp;.&nbsp;(&nbsp;)&nbsp;,&nbsp;*&nbsp;@<br>&amp;&nbsp;|&nbsp;=&nbsp;-&nbsp;+&nbsp;&lt;&nbsp;/&nbsp;&gt;&nbsp;at&nbsp;in&nbsp;is&nbsp;mod&nbsp;not&nbsp;range&nbsp;rem&nbsp;=&gt;<br>&nbsp;&nbsp;&nbsp;..&nbsp;&lt;an&nbsp;exponent&nbsp;(**)&gt;&nbsp;&lt;&gt;&nbsp;or&nbsp;!=&nbsp;or&nbsp;~=&nbsp;&gt;=&nbsp;&lt;=&nbsp;&lt;&gt;&nbsp;and&nbsp;or&nbsp;like<br>&nbsp;&nbsp;&nbsp;between&nbsp;||<br>indicator<br>The&nbsp;symbol&nbsp;&quot;.&quot;&nbsp;was&nbsp;substituted&nbsp;for&nbsp;&quot;OUTPUT&quot;&nbsp;to&nbsp;continue.
 
exec&nbsp;p_Test(:p1,:p2&nbsp;OUTPUT);
 
try<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;Query1&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;BEGIN');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;EXEC&nbsp;p_Test(:p1,:p2&nbsp;OUTPUT);');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('&nbsp;END;');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[0].AsString&nbsp;:=&nbsp;Edit1.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Params[1].AsString&nbsp;:=&nbsp;Edit2.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prepare;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;&nbsp;//出错<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(Params[1].AsString);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:Exception&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(E.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br><br>!!!提示如下错误<br>General&nbsp;SQL&nbsp;error.<br>ORA-06550:&nbsp;line&nbsp;3,&nbsp;column&nbsp;7:<br>PLS-00103:&nbsp;Encountered&nbsp;the&nbsp;symbol&nbsp;&quot;P_TEST&quot;&nbsp;when&nbsp;expecting&nbsp;one&nbsp;of&nbsp;the&nbsp;following:<br><br>&nbsp;&nbsp;&nbsp;:=&nbsp;.&nbsp;(&nbsp;@&nbsp;%&nbsp;;<br>The&nbsp;symbol&nbsp;&quot;:=&quot;&nbsp;was&nbsp;substituted&nbsp;for&nbsp;&quot;P_TEST&quot;&nbsp;to&nbsp;continue.<br>ORA-06550:&nbsp;line&nbsp;3,&nbsp;column&nbsp;22:<br>PLS-00103:&nbsp;Encountered&nbsp;the&nbsp;symbol<br>&quot;OUTPUT&quot;&nbsp;when&nbsp;expecting&nbsp;one&nbsp;of&nbsp;the&nbsp;following:<br><br>&nbsp;&nbsp;&nbsp;.&nbsp;(&nbsp;)&nbsp;,&nbsp;*&nbsp;@&nbsp;%&nbsp;&amp;&nbsp;|&nbsp;=&nbsp;-&nbsp;+&nbsp;&lt;&nbsp;/&nbsp;&gt;&nbsp;at&nbsp;in&nbsp;is&nbsp;mod&nbsp;not&nbsp;range&nbsp;rem&nbsp;=&gt;<br>&nbsp;&nbsp;&nbsp;..&nbsp;&lt;an<br>exponent&nbsp;(**)&gt;&nbsp;&lt;&gt;&nbsp;or&nbsp;!=&nbsp;or&nbsp;~=&nbsp;&gt;=&nbsp;&lt;=&nbsp;&lt;&gt;&nbsp;and&nbsp;or&nbsp;like<br>&nbsp;&nbsp;&nbsp;between&nbsp;||&nbsp;indicator<br>The&nbsp;symbo
 
SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('DECLARE&nbsp;@p2&nbsp;nvarchar(50)');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('EXEC&nbsp;p_Test&nbsp;'+&nbsp;Edit1.Text&nbsp;+',@p2&nbsp;OUTPUT;');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('Select&nbsp;@p2');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Memo1.Lines.Add(fields[0].value);
 
!!!Oracle
 

Similar threads

后退
顶部