Plsql 使用dbms_sql定义列

Plsql 使用dbms_sql定义列,plsql,Plsql,我得到一个pls-00307错误,它说“字符串”匹配了太多的对象表别名。这是什么意思? 当我试图在IF语句中定义一列时,第4节DEFINE列得到了一个突出显示,为什么会发生这种情况?有人能指导我完成这件事吗?谢谢 IF ((pStartDate IS NOT NULL) AND (pEndDate IS NOT NULL) AND (pStartDate < pEndDate)) THEN IF ((pIdType IS NOT NULL) AND (pId IS NOT N

我得到一个
pls-00307
错误,它说“字符串”匹配了太多的对象表别名。这是什么意思? 当我试图在IF语句中定义一列时,第4节DEFINE列得到了一个突出显示,为什么会发生这种情况?有人能指导我完成这件事吗?谢谢

IF ((pStartDate IS NOT NULL) AND (pEndDate IS NOT NULL) AND
     (pStartDate < pEndDate)) THEN


IF ((pIdType IS NOT NULL) AND (pId IS NOT NULL)) THEN
  loSqLText1 := ' CBP.CBP_ID_TYPE, CBP.CBP_ID AS  ';
  loSqLText2 := ' CBP_ID_TYPE, CBP_ID ';
  loSqLText3 := ' CBP_ID_TYPE = :pidtype AND CBP_ID = :pid ';
END IF;

IF ((pName IS NOT NULL) AND (pSurname IS NOT NULL)) THEN
  loSqLText1 := ' CBP.CBP_NAME, CBP.Cbp_Surname ';
  loSqLText2 := ' CBP_NAME , CBP_SURNAME ';
  loSqLText3 := ' CBP_NAME = :pname AND CBP_SURNAME = :psurname ';
END IF;
END IF;

  --1 Query

  loQuery := 'SELECT ' || loSqLText1 ||
         ' , IN_OUT_DATES.IN_COUNT, IN_OUT_DATES.OUT_COUNT  
         FROM 
           (SELECT HBP_PERSON , COUNT(HBP_IN_DATE) IN_COUNT , COUNT(HBP_OUT_DATE) OUT_COUNT 
             FROM HIST_BANNED_PERSONS WHERE HBP_IN_DATE BETWEEN 
              to_date('':pstartdate'',''mm/dd/yyyy'') AND to_date( '':penddate'' , ''mm/dd/yyyy'' )
              GROUP BY HBP_PERSON ) IN_OUT_DATES
              RIGHT OUTER JOIN
              (SELECT CBP_ROWID, ' || loSqLText2 ||
         ' FROM CHECK_BANNED_PERSONS WHERE ' || loSqLText3 ||
         ' ) CBP
              ON IN_OUT_DATES.HBP_PERSON = CBP.CBP_ROWID ';
  --2 OPEN CURSOR



loCursor := dbms_sql.open_cursor();

  --3 PARSE
  dbms_sql.parse(loCursor, loQuery, dbms_sql.native);

  --4 DEFINE COLUMN 
  IF ((pIdType IS NOT NULL) AND (pId IS NOT NULL)) THEN
    dbms_sql.define_column(loCursor, 1, loIdType);
    dbms_sql.define_column(loCursor, 2, loId);
  END IF;

  IF ((pName IS NOT NULL) AND (pSurname IS NOT NULL)) THEN
    dbms_sql.define_column(loCursor, 1, loName);
    dbms_sql.define_column(loCursor, 2, loSurname);
  END IF;

  dbms_sql.define_column(loCursor, 3, loInDate);
  dbms_sql.define_column(loCursor, 4, loOutDate);

据我所知,您的变量
loIdType
loId
loName
loSurname
具有
VARCHAR2
类型。在这种情况下,添加一个参数来定义可变长度:

dbms_sql.define_column(loCursor, 1, loIdType, 4000);
dbms_sql.define_column(loCursor, 2, loId, 4000);

dbms_sql.define_column(loCursor, 1, loName, 4000);
dbms_sql.define_column(loCursor, 2, loSurname, 4000);

谢谢你是个救生员,我真不敢相信我错过了!
dbms_sql.define_column(loCursor, 1, loIdType, 4000);
dbms_sql.define_column(loCursor, 2, loId, 4000);

dbms_sql.define_column(loCursor, 1, loName, 4000);
dbms_sql.define_column(loCursor, 2, loSurname, 4000);