Функция PL / SQL Return View Внутреннее исключение RowType - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть функция ниже, которая компилируется.DOC_ISSUE_REFERENCE ОСТАНОВЛЯЕТСЯ для ВИДА

 CREATE OR REPLACE
    PACKAGE BODY INHOUSE_CUST_API
    AS
    FUNCTION Get_Budget_Doc(
        company             IN VARCHAR2,
        budget_process_id   IN VARCHAR2,
        budget_ptemplate_id IN VARCHAR2)
      RETURN DOC_ISSUE_REFERENCE%ROWTYPE
    IS
      enhDocItem ENHANCED_DOC_REFERENCE_OBJECT%ROWTYPE;
      docKeyValue VARCHAR2(150);
      docIssueRef DOC_ISSUE_REFERENCE%ROWTYPE;
    BEGIN
      docKeyValue := company||'^'||budget_process_id||'^'||budget_ptemplate_id||'^';
     -- dbms_output.put_line(docKeyValue);
      SELECT *
      INTO enhDocItem
      FROM ENHANCED_DOC_REFERENCE_OBJECT
      WHERE KEY_VALUE= docKeyValue;
      SELECT *
      INTO docIssueRef
      FROM DOC_ISSUE_REFERENCE
      WHERE DOC_NO = enhDocItem.DOC_NO;
      RETURN docIssueRef;
    END Get_Budget_Doc;
    END INHOUSE_CUST_API;

. Суть в том, что когда я вызываю функцию, я получаю

ORA-06553: PLS-801: internal error [55018]
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:

, которая не показывает никакой вещи или помощи.Я уверен, что оба выбора возвращают только 1 строку.любая помощь приветствуется

1 Ответ

0 голосов
/ 06 декабря 2018

это моё решение в зависимости от комментария Ильи Маскова, пакет

create or replace 
PACKAGE INHOUSE_CUST_API
AS
TYPE doc_rec
IS
  RECORD
  (
    doc_Title    doc_issue_reference.title%Type,
    doc_Number   DOC_ISSUE_REFERENCE.DOC_NO%TYPE,
    doc_Type    DOC_ISSUE_REFERENCE.FILE_TYPE%TYPE,
    doc_FileName DOC_ISSUE_REFERENCE.FILE_NAME%TYPE,
    doc_Path     DOC_ISSUE_REFERENCE.PATH%TYPE);
TYPE doc_rec_tab IS TABLE OF doc_rec;
  FUNCTION Get_Budget_Doc(
      company             IN VARCHAR2,
      budget_process_id   IN VARCHAR2,
      budget_ptemplate_id IN VARCHAR2)
    RETURN doc_rec_tab PIPELINED;
END INHOUSE_CUST_API;

и тело

create or replace 
PACKAGE BODY INHOUSE_CUST_API
AS
FUNCTION Get_Budget_Doc(
    company             IN VARCHAR2,
    budget_process_id   IN VARCHAR2,
    budget_ptemplate_id IN VARCHAR2)
  RETURN doc_rec_tab PIPELINED
IS
  enhDocItem ENHANCED_DOC_REFERENCE_OBJECT%ROWTYPE;
  -- docIssueRef DOC_ISSUE_REFERENCE%ROWTYPE;
  docKeyValue ENHANCED_DOC_REFERENCE_OBJECT.KEY_VALUE%TYPE;
  docIssueRef_rec doc_rec;
  docTable doc_rec_tab;
BEGIN
  docKeyValue := company||'^'||budget_process_id||'^'||budget_ptemplate_id||'^';
    <<outer_loop>>
  FOR doc_no_rec IN (SELECT DOC_NO FROM ENHANCED_DOC_REFERENCE_OBJECT WHERE KEY_VALUE= docKeyValue) LOOP
  --dbms_output.put_line(doc_no_rec.rownum);
  <<inner_loop>>
    FOR rec_ IN(SELECT Title, DOC_NO,FILE_TYPE,FILE_NAME,PATH FROM DOC_ISSUE_REFERENCE WHERE DOC_NO = doc_no_rec.DOC_NO) LOOP
  PIPE row(rec_);
    END LOOP inner_loop;
  END LOOP outer_loop;
  RETURN;
END Get_Budget_Doc;
END INHOUSE_CUST_API;
...