【问题标题】:My PL/SQL code is not working:我的 PL/SQL 代码不工作:
【发布时间】:2016-11-15 12:34:55
【问题描述】:

这是我的代码:

CREATE OR REPLACE PROCEDURE log(repname in varchar2) AS 
  PACKAGE_NAME VARCHAR2,
  START_TIME DATE, 
  END_TIME DATE,
  STATUS;

BEGIN

  SELECT PACKAGE_NAME ,PRCS_START_TIME ,PRCS_END_TIME,STATUS
  FROM CONTCL_OWNER.PROCESSLOG 
  WHERE PACKAGE_NAME LIKE REPNAME
  ORDER BY PRCS_START_TIME
  WHERE ROW_NUMBER <=7;
END;

它给了我这些错误:

错误(2,60):PLS-00103:遇到符号“,”时预期以下之一:=。 ( @ % ; 非空范围默认字符

错误(3,1):PLS-00103:在预期以下之一时遇到符号“BEGIN”:long double ref char time timestamp interval date binary national character nchar

错误(7,26):PLS-00103:在预期以下情况之一时遇到符号“AND”:。 ( , * @ % & - + ; / at for mod 余数 rem asc desc || multiset 

【问题讨论】:

标签: oracle plsql


【解决方案1】:
CREATE OR REPLACE PROCEDURE log(repname in varchar2) AS    
PACKAGE_NAME VARCHAR2,-- give size here like varchar2(50) 
START_TIME DATE,    
END_TIME DATE,   
STATUS;

BEGIN

 SELECT 
PACKAGE_NAME ,
PRCS_START_TIME ,
PRCS_END_TIME,
STATUS

-- add into clause to assign selected --values in variables 

FROM CONTCL_OWNER.PROCESSLOG    
WHERE PACKAGE_NAME LIKE '%REPNAME%' 
And ROW_NUMBER <=7   ORDER BY PRCS_START_TIME ; 
END;

【讨论】:

    【解决方案2】:
    set serveroutput on;
    
    CREATE OR REPLACE PROCEDURE Plog(p_repname CONTCL_OWNER.PROCESSLOG.PACKAGE_NAME%TYPE)
    IS 
        CURSOR c_ctl IS
            SELECT PACKAGE_NAME    AS PNAME,
                   PRCS_START_TIME AS PSTIME,
                   PRCS_END_TIME   AS PETIME,
                   STATUS
            FROM CONTCL_OWNER.PROCESSLOG 
            WHERE PACKAGE_NAME = p_repname
            AND ROWNUM <=7
            ORDER BY PRCS_START_TIME ASC;
    BEGIN
        FOR v_ctl IN c_ctl LOOP
            DBMS_OUTPUT.PUT_LINE(v_ctl.PNAME  || ' - ' || 
                                 v_ctl.PSTIME || ' - ' ||
                                 v_ctl.PETIME || ' - ' ||
                                 v_ctl.STATUS);
        /* ....
           HERE YOUR CODE LINE BY LINE
           ....
           ....
        */
        END LOOP;
    END Plog;
    

    您不能使用 'SELECT * INTO ...',因为您的 SELECT 返回很多行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 2010-11-29
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多