用PL/SQL编写delphi函数?

用PL/SQL编写delphi函数?,sql,oracle,delphi,syntax,plsql,Sql,Oracle,Delphi,Syntax,Plsql,如何从此Delphi函数编写等效的PL/SQL函数: Function TConvert.MGRS(lat : Double; Lon : Double; a : Double; InverseFlattening : Double; Coding:Integer; Digits : Integer) : String ; var UTMs1 : String; E1 : Double; N1 : Double; Zn : Integer; Lzn : String

如何从此Delphi函数编写等效的PL/SQL函数:

Function TConvert.MGRS(lat : Double; Lon : Double; a : Double; 
         InverseFlattening : Double; Coding:Integer; Digits : Integer) : String ;
var
 UTMs1 : String;
 E1 : Double;
 N1 : Double;
 Zn : Integer;
 Lzn : String;
 Sq : String;
begin
 UTMs1 := UTM(lat, Lon, a, InverseFlattening) ;
 E1 := UTMX(UTMs1);
 N1 := UTMY(UTMs1);
 Zn := UTMZone(lat, Lon);
 Lzn := MGRSLatZone(lat);
 Sq := SquareID(Zn, N1, E1, Coding);
 Result := Format('%.2d', [Zn] )  + Lzn + Sq +
     Copy(Format('%.5d',[Round(E1 - 100000 * Trunc(E1 / 100000))]), 1, Digits) +
     Copy(Format('%.5d',[Round(N1 - 100000 * Trunc(N1 / 100000))]), 1, Digits);
end;

MGRS(0,0,6378.137,298.2572236,1,5)=31NAA6602100000不确定是否可以将整个代码转换为本机Oracle调用,但关于字符串格式的初始问题,生成的代码可能如下所示:

create or replace function MyFunction(
  Zn     in number,
  Lzn    in varchar2,
  Sq     in varchar2,
  E1     in number,
  N1     in number,
  Digits in number
) 
return varchar2
as
  vRes varchar2(4000);
begin

  vRes := trim(to_char(Zn,'999999999999999999.00')) || LZn || Sq || 
          substr(trim(to_char(round(E1 - 100000 * trunc(E1/100000)),'999999999999999999.00000')), 1, Digits) || 
          substr(trim(to_char(round(N1 - 100000 * trunc(N1/100000)),'999999999999999999.00000')), 1, Digits) 
  ;

  return vRes;

end;


)()

不确定是否可以将整个代码转换为本机Oracle调用,但关于字符串格式的初始问题,生成的代码可能如下所示:

create or replace function MyFunction(
  Zn     in number,
  Lzn    in varchar2,
  Sq     in varchar2,
  E1     in number,
  N1     in number,
  Digits in number
) 
return varchar2
as
  vRes varchar2(4000);
begin

  vRes := trim(to_char(Zn,'999999999999999999.00')) || LZn || Sq || 
          substr(trim(to_char(round(E1 - 100000 * trunc(E1/100000)),'999999999999999999.00000')), 1, Digits) || 
          substr(trim(to_char(round(N1 - 100000 * trunc(N1/100000)),'999999999999999999.00000')), 1, Digits) 
  ;

  return vRes;

end;


)()

请提供带参数的完整函数定义。一些预期输入和输出的示例也很有用。您知道PL/SQL吗?你试过写代码吗?你明白这段代码的作用吗?@David Heffernan是的,我知道一些PL/SQL。是的,快写完了。是的,但我无法理解如何在PL/SQL中格式化。请提供完整的函数定义和参数。一些预期输入和输出的示例也会很有用。您知道任何PL/SQL吗?你试过写代码吗?你明白这段代码的作用吗?@David Heffernan是的,我知道一些PL/SQL。是的,快写完了。是的,但是我不能理解如何在PL/SQL中格式化它。谢谢。你比我快了几秒钟,我正要回答我自己的问题,比如:RT*M@writtrup Ok:)注意,数字格式总是返回前导空白,所以你需要修剪输出。完整的代码可以在这里查看:谢谢@ThinkJetThank You。你比我快了几秒钟,我正要回答我自己的问题,比如:RT*M@writtrup Ok:)注意,数字格式总是返回前导空白,所以你需要修剪输出。完整的代码可以在这里查看:谢谢@ThinkJet