我正在尝试编写一个存储过程,我使用refcursor,但是当我尝试运行它时,Oracle告诉我没有声明refcursor
包:
create or replace package types
as
type cursorType is ref cursor;
end;
/
程序:
CREATE OR REPLACE PROCEDURE p_lista_veic_aluguer (
ESCRITORIO IN INT,
CATEGORIA IN CHAR,
DATA_INI IN DATE,
DATA_FIM IN DATE,
RETVAL IN OUT types.cursorType
) is
BEGIN
open retval for
SELECT B.COD_Veiculo,B.Marca
FROM VEICULO B
LEFT JOIN ALUGUER A
ON A.COD_VEICULO = B.COD_VEICULO
AND (data_ini BETWEEN A.DATA_LEVANTAMENTO AND A.DATA_ENTREGA
OR data_fim BETWEEN A.DATA_LEVANTAMENTO AND A.DATA_ENTREGA)
WHERE A.COD_VEICULO IS NULL
AND B.DATA_MANUTENCAO IS NULL
AND B.CATEGORIA = categoria
ORDER BY f_menor_dist(B.ESCRITORIO_ATUAL,escritorio) ASC;
END p_lista_veic_aluguer;
/
测试:
SET DEFINE OFF;;
DECLARE
ESCRITORIO NUMBER;
CATEGORIA CHAR(200);
DATA_INI DATE;
DATA_FIM DATE;
variable RETVAL TYPES.cursorType;
BEGIN
ESCRITORIO := 22;
CATEGORIA := 'A';
DATA_INI := '2012/11/23';
DATA_FIM := '2012/11/30';
P_LISTA_VEIC_ALUGUER( ESCRITORIO => ESCRITORIO,
CATEGORIA => CATEGORIA,
DATA_INI => DATA_INI,
DATA_FIM => DATA_FIM,
RETVAL => RETVAL );
/* Legacy output:
DBMS_OUTPUT.PUT_LINE('RETVAL = ' || RETVAL);
*/
print retval;
END;
错误:
错误报告:ORA-06550:linha 6,coluna 19:PLS-00103:当遇到以下情况之一时遇到符号“TYPES”:: = . (@%;非空范围默认字符符号“:=”代替“TYPES”继续.ORA-06550:linha 16,coluna 9:PLS-00103:遇到下列其中一项时遇到符号“RETVAL” :: = . (@%;符号“:=”代替“RETVAL”继续.06550 . 00000 - “行%s,列%s:\ n%s”*原因:通常是PL / SQL编译错误 . *行动:
1 回答
结束;
试试这个它会起作用 .