Oracle 如何将查询转换为PL/SQL

Oracle 如何将查询转换为PL/SQL,oracle,plsql,Oracle,Plsql,你能告诉我一个如何转换成存储过程的例子吗?(该查询要大很多) 我只需要一个例子 如何转换C2 Select A1,B1,B2,B3,B4,B5,C1,C2 From ( Select Distinct A.Fiseguro, Trunc(A.Fdfecsurt) A1, 'SEGURO DE MOTO' B1, 'Q' B2, A.Fnprima

你能告诉我一个如何转换成存储过程的例子吗?(该查询要大很多) 我只需要一个例子 如何转换C2

Select 
A1,B1,B2,B3,B4,B5,C1,C2
From (
Select    Distinct

          A.Fiseguro,
          Trunc(A.Fdfecsurt) A1,
          'SEGURO DE MOTO'   B1,
          'Q'                B2,  
          A.Fnprima          B3,
          A.Fccertificado    B4,
          To_Number(
            Sms.Fnsumaaseg
          )                  B5,
          'FISICA'           C1,
          Replace( Coalesce(
            Case When Regexp_Like(Trim(Substr(Sia.Saz_Adnrow, 25, 14)), '^\d') And Length(Trim(Substr(Sia.Saz_Adnrow, 25, 14)))<13 Then Trim(Substr(Sia.Saz_Adnrow, 25, 14)) Else Null End,
              Case When Regexp_Like(Trim(Mc.Fcrfc), '^\d') And Length(Trim(Mc.Fcrfc))<13 Then Trim(Mc.Fcrfc) Else Null End,
              Case When Regexp_Like(Trim(Sds2.Fcdocnumref), '^\d') And Length(Trim(Sds2.Fcdocnumref))<13 Then Trim(Sds2.Fcdocnumref) Else Null End,
              Case When Regexp_Like(Trim(Scl1.Fcdni), '^\d') And Length(Trim(Scl1.Fcdni))<13 Then Scl1.Fcdni Else Null End,
              Case When Regexp_Like(Trim(Scl1.Fcdocnumref), '^\d') And Length(Trim(Scl1.Fcdocnumref))<13 Then Trim(Scl1.Fcdocnumref) Else Null End,
              Case When Regexp_Like(Trim(Scl2.Fcrfc), '^\d') And Length(Trim(Scl2.Fcrfc))<13 Then Trim(Scl2.Fcrfc) Else Null End,
              Case When Regexp_Like(Trim(Scl2.Fcdn2), '^\d') And Length(Trim(Scl2.Fcdn2))<13 Then Trim(Scl2.Fcdn2) Else Null End,
              Case When Regexp_Like(Trim(Scl2.Fcdpi), '^\d') And Length(Trim(Scl2.Fcdpi))<13 Then Trim(Scl2.Fcdpi) Else Null End,
              'CF'
          ), '-')            C2,

From table A
  Left Join table Sms
        On Sms.Fipais = To_Char(A.Fipais)
        And Sms.Ficanal = To_Char(A.Ficanal)
        And Sms.Fisucursal = To_Char(A.Fisucursal)
        And Sms.Finopedido = To_Char(A.Finopedido)
选择
A1、B1、B2、B3、B4、B5、C1、C2
从(
选择不同的
A.费塞古罗,
Trunc(A.fdfectsurt)A1,
“SEGURO DE MOTO”B1,
"Q"B2,,
A.Fnprima B3,
A.Fccertificado B4,
托福号码(
Sms.Fnsumaaseg
)B5,
“FISICA”C1,
替换(合并)(

当Regexp_Like(Trim(Substr(Sia.Saz_Adnrow,25,14)),“^\d”)和Length(Trim(Substr(Sia.Saz_Adnrow,25,14))这并不能完全回答您的问题,但如果您的查询是

SELECT x FROM t WHERE ID = 1;
然后存储过程返回x(假设ID是唯一索引):


不清楚您要求的是什么。转换为存储过程是什么意思?是否要调用存储过程并获得结果?您希望传递给存储过程的是什么,希望返回什么?是否确保结果只有一个值,或者是否需要返回一个数据数组?请更具体一点。是,我希望返回他得到的结果与查询给我的结果相同。但是在SP中,你是说,你想要一个不带输入参数的存储过程,并且有一个
SYS\u REFCURSOR
作为为此查询打开的输出参数吗?这将是一个奇怪的构造。视图将更为传统。如果你需要PL/SQL块而不是与SQL构造相比,返回一个
SYS\u REFCURSOR
的函数通常更合适。不要将PL/SQL用于简单地在SQL中执行的任何操作。我只想知道如何在“n”表上输出“n”字段,并在这些表上应用一些有效的命令
CREATE OR REPLACE FUNCTION MY_STORED_PROC(i_id number)
RETURN x.t%TYPE
IS
  l_val x.t%TYPE;
BEGIN
  SELECT x
  INTO   l_val
  FORM   t
  WHERE  ID = i_id;
  return l_val;
END;