我想调用自定义的包体中的函数myFun(a varchar2,b varchar2):return number;用了两种方法都不行;
第一种,建一个adoQuery,sql.add('select mypakage.myfun(x,y) cs from dual');(为做实验,其中的x,y都用的常量),使其active:=true,不报错;建一个dbgrid,指定它的datasouce为该query对应的dataset,但没有数据;而在sqlplus下,可以得到数据200;
第二种,建一个adostoreproc adosp_myfunc,建立3个参数,其中rt为returnValue型参数,integer类型
with adosp_myfunc do
begin
parameters.paramByName('a').value:=x;
parameters.paramByName('b').value:=y;
parameters.paramByName('rt').value:=0;
execProc;
edit1.text:=parameters.paramByName('rt').asString;
end;
报错参数个数错,如果不加rt参数,edit句报错.
csdn中,好象大家都用的output参数的存储过程,如果我不想把function 改为procedure(,,out)形式,该怎样做呢?
第一种,建一个adoQuery,sql.add('select mypakage.myfun(x,y) cs from dual');(为做实验,其中的x,y都用的常量),使其active:=true,不报错;建一个dbgrid,指定它的datasouce为该query对应的dataset,但没有数据;而在sqlplus下,可以得到数据200;
第二种,建一个adostoreproc adosp_myfunc,建立3个参数,其中rt为returnValue型参数,integer类型
with adosp_myfunc do
begin
parameters.paramByName('a').value:=x;
parameters.paramByName('b').value:=y;
parameters.paramByName('rt').value:=0;
execProc;
edit1.text:=parameters.paramByName('rt').asString;
end;
报错参数个数错,如果不加rt参数,edit句报错.
csdn中,好象大家都用的output参数的存储过程,如果我不想把function 改为procedure(,,out)形式,该怎样做呢?
Public Property Direction As ParameterDirection Implements _
IDataParameter.Direction
[C#]
public ParameterDirection Direction {get; set;}
[C++]
public: __property ParameterDirection get_Direction();
public: __property void set_Direction(ParameterDirection);
[JScript]
public function get Direction() : ParameterDirection;
public function set Direction(ParameterDirection);
属性值
ParameterDirection 值之一。默认值为 Input。实现
IDataParameter.Direction异常
异常类型 条件
ArgumentException 该属性未设置为有效的 ParameterDirection 值之一。 备注
如果 ParameterDirection 是输出,而执行的关联 SqlCommand 不返回值,则 SqlParameter 包含空值。当读取最后一个结果集的最后一行后,将更新 Output、InputOut 和 ReturnValue 参数。示例
[Visual Basic, C#] 下面的示例创建一个 SqlParameter 并设置它的一些属性。[Visual Basic]
Public Sub CreateSqlParameter()
Dim myParameter As New SqlParameter("@Description", SqlDbType.VarChar)
myParameter.Direction = ParameterDirection.Output
End Sub 'CreateSqlParameter
[C#]
public void CreateSqlParameter()
{
SqlParameter myParameter = new SqlParameter("@Description", SqlDbType.VarChar);
myParameter.Direction = ParameterDirection.Output;
}
begin
x := 2.5;
y := 5.6;
adoQuery,sql.add('select mypakage.myfun('+ FloatToStr(x) +','+ FloatToStr(y) + ') cs from dual');
{...}
end;
学习
up
sqlserver
--创建函数
Create function t_funcMin( @x int, @y int) returns int
as
begin
declare @r int
if @x< @y
set @r = @x
else
set @r = @y
return (@r)
end//delphi调用
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOquery1 do
begin
close;
sql.clear;
sql.add('select dbo.t_funcMin(5,4) as a');
open;
showmessage(inttostr(fields[0].asinteger));
end;
end;这里没问题
但是,用「To_Char」函数把数字型轉換成字符型就可顕示了、試試看。with DataModule1.ADOQuery1 do begin
SQL.Text := 'select To_Char(myFun(''5'',''6'')) from dual';
Open;
end;