Это не FROM ... INTO
, а INTO ... FROM
:
FUNCTION PO_PROD_CODE (s_prod_code VARCHAR2) RETURN VARCHAR2 IS
v_po_prod_code_result VARCHAR2(100);
BEGIN
SELECT FLEX_VALUE
FROM apps.FND_FLEX_VALUES_VL --> this is
INTO v_po_prod_code_result --> wrong
WHERE attribute1 IN ('BXX', 'EXX', 'GXX', 'HKXX', 'PDX', 'PSX', 'GPX')
AND FLEX_VALUE = s_prod_code ;
RETURN v_po_prod_code_result;
END;
/
Должно быть
SELECT FLEX_VALUE
INTO v_po_prod_code_result
FROM apps.FND_FLEX_VALUES_VL
[РЕДАКТИРОВАТЬ]
CASE второй функции недействителен.Этот SELECT должен быть удален из него, его таблицы используются в главном предложении SELECT FROM.Примерно так (что нормально в синтаксисе, я не знаю, будет ли это работать):
FUNCTION PO_DOC_LOCATION_TEXT (N_ORG_ID NUMBER, N_PO_HEADER_ID NUMBER)
RETURN VARCHAR2
IS
v_po_doc_location_text VARCHAR2 (150);
BEGIN
SELECT 'PO\'
|| PO_DIVISION_CODE
|| '\'
|| PO_PRODUCT_LINE
|| '\'
|| PO_NUM
|| '\'
AS "DOC_TEXT"
INTO v_po_doc_location_text
FROM (SELECT poh.SEGMENT1 PO_NUM,
poh.ORG_ID,
poh.ATTRIBUTE14 AS "PO_PRODUCT_LINE",
poh.ATTRIBUTE15 AS "PO_DIVISION",
CASE ffvv.attribute1
WHEN 'ABC' THEN 'AB' --FLEX_VALUE_ID,FLEX_VALUE PRO_CODE,
WHEN 'DEF' THEN 'DE'
WHEN 'GSD' THEN 'HK'
WHEN 'HIG' THEN 'HG'
WHEN 'PIG' THEN 'PG'
WHEN 'BCE' THEN 'BE'
WHEN 'GP' THEN 'HK'
ELSE ''
END
PO_DIVISION_CODE
FROM APPS.PO_HEADERS_ALL poh,
apps.fnd_flex_values_vl ffvv,
apps.fnd_flex_value_sets ffvs
WHERE ffvv.flex_value_set_id = ffvs.flex_value_set_id
AND ffvs.flex_value_set_name = 'XXX_PROD_LINES'
AND ffvv.enabled_flag = 'Y'
AND ( ( ffvv.attribute4 = 'Y'
AND poh.ORG_ID = 83)
OR ( ffvv.attribute5 = 'Y'
AND poh.ORG_ID = 87))
AND ffvv.flex_value =
PO_PROD_CODE (v_po_prod_code_result, s_prod_code)
AND poh.ORG_ID = N_ORG_ID
AND poh.po_header_id = N_PO_HEADER_ID);
RETURN v_po_doc_location_text;
EXCEPTION
WHEN OTHERS
THEN
v_po_doc_location_text := 'PO\MO\';
END;