作者:l彡id夏日阳光 | 来源:互联网 | 2023-09-24 10:31
declarepi_campaignInteger;pi_tasks_noInteger;pn_error_noInteger;pvc_error_infovarcha
declare
pi_campaign Integer;
pi_tasks_no Integer;
pn_error_no Integer;
pvc_error_info varchar2(254);
begin
pi_campaign:=2;
sp_insert('0', pi_campaign, '', null, '', '', '', '', '', null, null, '', '', 0, 'email:', '0', '', '', '', 'text', 'abcdefghijklmnopqrstuvwx', 'memo', pi_tasks_no, pn_error_no, pvc_error_info);
end;
如何用TQuery执行?
10 个解决方案
至少你要说明你的sp_insert的结构吧
你是想批量执行sql语句还是想批量插入数据?还是象怎么样啊?
还是你把sql语句存在一个地方,然后批量执行?
不明白,如果你是想批量执行,那么可以循环给tquery.sql赋值,循环执行
Query.SQl.Add('declare
pi_campaign Integer;
pi_tasks_no Integer;
pn_error_no Integer;
pvc_error_info varchar2(254);
begin
pi_campaign:=2;
sp_insert('''+'0'+''''+', pi_campaign, '''+''+''''+', null, '''+''+''''+', '''+''+''''+', '''+''+''''+', '''+''+''''+', '''+''+''''+', null, null, '''+''+''''+', '''+''+'''', 0, '''+'email:'+''''+', '''+'0'+''''+', '''+''+''''+', '''+''+''''+', '''+''+''''+', '''+'text'+''''+', '''+'abcdefghijklmnopqrstuvwx'+''''+', '''+'memo'+''''+', pi_tasks_no, pn_error_no, pvc_error_info);
end;
');
一堆引号,看起来头都晕了,不喜欢这种方式,可以用参数,更明了一些。
不管SQL语句的多少(无返回值),原则上都可以把它作为一个SQL语句使用SQL.add后在Query上运行。
我就想执行一次呀。我是这样写:sql := '上面的语句';
Query.Active := false;
Query.SQL.Clear;
Query1.Sql.Add(sql);
Query1.ExecSQL;
这样执行它报错,但是我把里面的sql放到Toad上面执行是可以通过的。
to:zzllabc(抱朴子--清心释累,绝率忘情)如果用参数该如何写?给个例子看看好吗?
最好不要去设Query.Active 属性,默认的false 就行了
用query.close去代替Query.Active := false;
Query.close;
Query.SQL.Clear;
Query1.Sql.Add(sql);
Query1.ExecSQL;
应该不会有问题的,除非就是sql的错。
query.close;
query.sql.clear;
query.sql.add(...........);
query.prepare;
query.open;
你是要执行「sp_insert」吧? 要用TADOStoredProc控件。
//在執行前、先加参数定義
ADOStoredProc1.Parameters.Clear; //清空参数列表
with ADOStoredProc1.Parameters.AddParameter do
begin
Name := 'pi_campaign';
DataType := ftInterger;
Direction := pdInput; //in(輸入参数)
end;
{...}
with ADOStoredProc1.Parameters.AddParameter do
begin
Name := 'pvc_error_info';
DataType := ftString;
Direction := pdOutput; //out(輸出参数)
Size := 254;
end;
with ADOStoredProc1 do
begin
Prepared := True;
Parameters.ParamByName('pi_campaign').Value := 2; //入参
ExecProc; //執行
返回値 := Parameters.ParamByName('pvc_error_info').Value; //出参
{...}
end;
説明:用静態方式把「sp_insert」接到「ADOStoredProc1」的「ProcedureName」上