代码之家  ›  专栏  ›  技术社区  ›  looker

oracle中的错误

  •  1
  • looker  · 技术社区  · 8 年前

    我在oracle中有以下过程:

    CREATE OR REPLACE procedure getPrecioMayorActual(PAR_ID_SUBASTA DECIMAL, 
    outi out sys_refcursor) IS
     var1 decimal;
    BEGIN
    open outi for
            SELECT (p.MONTO_OFRECIDO) into var1 
            FROM (SUBASTA AS s) INNER JOIN (PUJA AS p) ON (s.ID_PUJA_MAYOR = 
    p.ID_PUJA) 
            WHERE (s.ID_SUBASTA = PAR_ID_SUBASTA);
    END getPrecioMayorActual;
    

    问题是我遇到以下错误:

    Error(5,9): PL/SQL: SQL Statement ignored
    Error(6,23): PL/SQL: ORA-00907: missing right parenthesis
    

    我到处都找过了,但就是看不出问题出在哪里。我很确定这一定很简单,但这是我第一次使用它,我在网上找不到任何有用的东西。谁能帮我一把吗?谢谢

    2 回复  |  直到 8 年前
        1
  •  1
  •   Barbaros Özhan    8 年前

    正在删除 as 关键字已足够,如下所示(对于 table 它们不能使用别名,但可以用于 column 别名(可选):

    create or replace procedure getPrecioMayorActual(PAR_ID_SUBASTA DECIMAL,
    outi out sys_refcursor) IS
     var1 decimal;
    BEGIN
    open outi for
            SELECT (p.MONTO_OFRECIDO) into var1
            FROM (SUBASTA s) INNER JOIN (PUJA p) ON (s.ID_PUJA_MAYOR =
    p.ID_PUJA)
            WHERE (s.ID_SUBASTA = PAR_ID_SUBASTA);
    END getPrecioMayorActual;
    

    此外,即使上述语法正确,也没有必要在 SELECT 声明,以及 PROCEDURE 的名称。然后,您可能希望按照以下方式编写您的过程:

    CREATE or REPLACE PROCEDURE getPrecioMayorActual(PAR_ID_SUBASTA DECIMAL, outi out sys_refcursor) IS
      var1 decimal;
    BEGIN
     OPEN outi FOR
     SELECT p.MONTO_OFRECIDO
       INTO var1 
       FROM SUBASTA s INNER JOIN PUJA p ON s.ID_PUJA_MAYOR = p.ID_PUJA
      WHERE s.ID_SUBASTA = PAR_ID_SUBASTA;
    END;
    
        2
  •  0
  •   jose_bacoy    8 年前

    您不需要var1,因为您正在将光标传递给outi。

    CREATE OR REPLACE procedure 
    getPrecioMayorActual(PAR_ID_SUBASTA DECIMAL, 
    outi out sys_refcursor) AS
    BEGIN
    open outi for
            SELECT (p.MONTO_OFRECIDO) 
            FROM (SUBASTA AS s) INNER JOIN (PUJA AS p) ON 
    (s.ID_PUJA_MAYOR = 
    p.ID_PUJA) 
            WHERE (s.ID_SUBASTA = PAR_ID_SUBASTA);
    END getPrecioMayorActual;