【发布时间】:2013-12-09 19:06:47
【问题描述】:
我正在尝试运行这个存储过程
DECLARE
P_TICKER_SERIAL VARCHAR2(200);
P_SECTOR_CODE VARCHAR2(200);
P_SOURCE_ID VARCHAR2(200);
P_COUNTRY_CODE VARCHAR2(200);
P_FILTER_TYPE NUMBER;
CUR_OUT SYS_REFCURSOR;
dbUserTable DBUSER%ROWTYPE;
BEGIN
P_TICKER_SERIAL :='14232';
P_SECTOR_CODE := '15';
P_SOURCE_ID := 'TDWL';
P_COUNTRY_CODE := 'SA';
P_FILTER_TYPE := 1;
PKG_name.GET_user(
P_TICKER_SERIAL => P_TICKER_SERIAL,
P_SECTOR_CODE => P_SECTOR_CODE,
P_SOURCE_ID => P_SOURCE_ID,
P_COUNTRY_CODE => P_COUNTRY_CODE,
P_FILTER_TYPE => P_FILTER_TYPE,
CUR_OUT => CUR_OUT
);
open CUR_OUT;
LOOP
FETCH CUR_OUT INTO dbUserTable;
dbms_output.put_line(dbUserTable.email);
END LOOP;
CLOSE CUR_OUT;
END;
/
但它给了我这个错误
Error report:
ORA-06550: line 8, column 15:
PLS-00201: identifier 'DBUSER' must be declared
ORA-06550: line 8, column 15:
PL/SQL: Item ignored
ORA-06550: line 24, column 2:
PLS-00382: expression is of wrong type
ORA-06550: line 24, column 2:
PL/SQL: SQL Statement ignored
ORA-06550: line 26, column 24:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 26, column 5:
PL/SQL: SQL Statement ignored
ORA-06550: line 27, column 28:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 27, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
任何人都知道什么是错的? 谢谢。
【问题讨论】:
-
CUR_OUT 代表多行而不是单个值。
-
1) GET_user 过程很可能会打开游标,无需再次打开它(PLS-00382 错误的原因) - 删除 open CUR_OUT 语句; 2) 例如,如果您不想永远挂起会话,则需要在 CUR_OUT%notfound 时退出循环条件。