[英]ORA-06550: line 1, column 7 (PL/SQL: Statement ignored) Error
[英]ERROR at line 10: PL/SQL: Statement ignored
我正在嘗試在oracle pl / sql上創建一個過程,但出現錯誤。
我的過程的代碼是:
CREATE OR REPLACE PROCEDURE PR_LISTA_CLI (cpf IN VARCHAR2, p_rc OUT SYS_REFCURSOR)
IS
checkCpf NUMBER;
BEGIN
SELECT COUNT(CPF_CLIENTE) INTO checkCpf FROM CLIENTE WHERE CPF_CLIENTE = cpf;
IF (checkCpf > 0) THEN
open p_rc
for
select
com.data_compra,
lst.qde_produto,
prd.nome_produto,
prd.valor_produto * lst.qde_produto
from cliente cli
inner join compra com on cli.cod_cliente = com.cod_cliente
inner join lista_produto lst on com.cod_compra = lst.cod_compra
inner join produto prd on lst.cod_produto = prd.cod_produto
WHERE cli.cpf_cliente = cpf
order by com.data_compra asc;
ELSE
RAISE_APPLICATION_ERROR(-20999,'ERRO! Cpf não cadastrado!', FALSE);
END IF;
END;
該過程創建成功,沒有錯誤。
但是我在調用它后得到了錯誤-CALL PR_LISTA_CLI(111111111);
ORA-00911: invalid character
請問如何解決?
謝謝!!!
您的編譯錯誤在第10行,這是您執行SELECT
。 除非您使用的是12.1或更高版本,並且希望使用新的隱式語句結果功能,否則除非有將結果提取到其中的內容(例如[BULK COLLECT] INTO
子句),否則您不能在PL / SQL塊中具有SELECT
語句。您正在使用SELECT
語句打開游標。 假設您的查詢返回多行,並且您打算將游標返回給調用者,則可以執行以下操作
CREATE OR REPLACE PROCEDURE PR_LISTA_CLI (cpf IN VARCHAR2, p_rc OUT SYS_REFCURSOR)
IS
vEXCEPTION EXCEPTION;
checkCpf NUMBER;
BEGIN
SELECT COUNT(CPF_CLIENTE) INTO checkCpf FROM CLIENTE WHERE CPF_CLIENTE = cpf;
IF (checkCpf > 0) THEN
open p_rc
for
select
com.data_compra,
lst.qde_produto,
prd.nome_produto,
prd.valor_produto * lst.qde_produto
from cliente cli
inner join compra com on cli.cod_cliente = com.cod_cliente
inner join lista_produto lst on com.cod_compra = lst.cod_compra
inner join produto prd on lst.cod_produto = prd.cod_produto
WHERE cli.cpf_cliente = cpf
order by com.data_compra asc
ELSE
RAISE vEXCEPTION;
END IF;
EXCEPTION
WHEN vEXCEPTION THEN
RAISE_APPLICATION_ERROR(-20999,'ERRO! Cpf não cadastrado!', FALSE);
END;
現在,如果那是你在做什么
sys_refcursor
的函數會更有意義。 vException
中間人,刪除異常處理程序和vException
變量,然后在您的ELSE
子句中調用RAISE_APPLICATION_ERROR
(假設首先在這種情況下拋出異常確實有意義)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.