Vou fazer a página de pedidos de laboratório no oracle APEX, tenho 2 colunas
cliente e os testes pertencem ao cliente selecionado
primeiro selecionarei o cliente e depois quero mostrar a lista de testes para esse cliente
Fiz o seguinte código para a coluna da lista de testes:
Consulta SQL para lista de seleção:
Select GET_CUSTOMERS_TEST(CUST_NO) TEST_NAME,CUST_NO
From CUSTOMERS_PRICE_LIST
WHERE CUST_NO = :P58_CUSTOMER;
Então criei a seguinte função e a chamei da consulta GET_CUSTOMERS_TEST(CUST_NO)
create or replace function GET_CUSTOMERS_TEST(P_CUST_NO NUMBER)
RETURN VARCHAR2
IS
V_NAME VARCHAR2(255);
BEGIN
IF P_CUST_NO IS NOT NULL THEN
SELECT B.TEST_NAME_ENG INTO V_NAME
FROM CUSTOMERS_PRICE_LIST A, LAB_TESTS B
WHERE A.CUST_NO = P_CUST_NO
AND A.TEST_NO = B.TEST_NO;
RETURN V_NAME;
ELSE
return null;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;
/
O erro aparece quando seleciono o cliente e abro a lista de testes, ele mostra este erro:
Como posso resolver esse erro, por favor, agradeço antecipadamente.
Bem... você deve depurar sua página apex para descobrir o que está acontecendo exatamente. As capturas de tela abaixo são de um pequeno teste que escrevi para simular seu erro.
Etapa 1: habilitar a depuração:
Abra esse registro e procure pelo erro. Isso mostrará qual declaração está dando erro.
Pelo seu erro parece que a consulta
está retornando mais de uma linha. A
SELECT INTO
recupera uma ou mais colunas de uma única linha docs . Ele gerará uma exceção com erro 1422 se o select retornar mais de uma linha. Se você estiver ciente disso e quiser apenas a primeira linha, poderá adicionar umFETCH FIRST 1 ROWS ONLY
Senão... provavelmente um bug e a consulta precisa ser corrigida. Boa sorte!
Resolvi assim:
na coluna de testes substituí a CONSULTA SQL e utilizei a seguinte consulta:
então em LISTA DE VALORES EM CASCATA
item pai: P58_CUSTOMER
e pai necessário em Então está funcionando