2016-07-27 3 views
0

Oracle에서 파이프 라인 함수를 호출하는 중 "지원되지 않는 열 데이터 형식"오류가 발생하고이를 해결하는 방법이 확실하지 않습니다.Petapoco - Oracle 파이프 라인 함수 호출시 "지원되지 않는 열 데이터 형식"예외가 발생합니다.

다음
CREATE OR REPLACE TYPE SUG_PUBS_TBL AS TABLE OF SUG_PUBS_T 
/

CREATE OR REPLACE TYPE CIC3.SUGGESTED_PUBS_T AS OBJECT 
(
    invid VARCHAR2(15), 
    title VARCHAR2(300), 
    desc VARCHAR2(500), 
    price VARCHAR2(5), 
    fin NUMBER(15), 
    desig VARCHAR2(5) 
) 
/

내 서비스 호출입니다 : 여기

CREATE OR REPLACE FUNCTION CIC3.F_SUG_PUBS_BY_DESIGS(p_desigs in VARCHAR2) 
    RETURN SUG_PUBS_TBL PIPELINED IS 
BEGIN 
    FOR r IN (
     SELECT invid, title, desc, price, fin, desig FROM v_sugpubs WHERE desig = p_desigs 
    ) 
    LOOP 
     PIPE ROW(SUG_PUBS_T(r.invid, r.title, r.desc, r.price, r.fin, r.desig)); 
    END LOOP; 
    RETURN; 
END F_SUG_PUBS_BY_DESIGS; 
/

는 2 종류입니다 : 여기

이이 실제보다 조금 더 간단하지만 정확히 동일하게 작동 코드의

:
public object Get(SugPubsRequest request) 
{ 
    if (QryPidFromLT(request.LT) == request.PID) 
    { 
     List<SugPubsResponse> p = GetSugPubs(request.Desigs); 
     return p; 
    } 
    else 
    { 
     throw new AuthenticationException("Invalid LT"); 
    } 
} 

private List<SugPubsResponse> GetSugPubs(string Desigs) 
{ 
    var db = new PetaPoco.Database("Settings.Oracle"); 
    var sql = "SELECT F_SUG_PUBS_BY_DESIGS('" + Desigs + "') FROM DUAL"; 
    List<SugPubsResponse> _sc = db.Fetch<SugPubsResponse>(sql); 
    return _sc; 
} 

그리고 여기는 모델입니다

[Route("/SugPubs/{LT}/{PID}/{Desigs}")] 
public class SugPubsRequest 
{ 
    public string LT { get; set; } 
    public int PID { get; set; } 
    public string Desigs { get; set; } 
} 
public class SugPubsResponse 
{ 
    [PetaPoco.Column("invid")] 
    public string InvId { get; set; } 
    [PetaPoco.Column("title")] 
    public string Title { get; set; } 
    [PetaPoco.Column("desc")] 
    public string Desc { get; set; } 
    [PetaPoco.Column("price")] 
    public string Price { get; set; } 
    [PetaPoco.Column("fin")] 
    public int Fin { get; set; } 
    [PetaPoco.Column("desig")] 
    public string Desig { get; set; } 
} 

답변

0

것은 나는 결과를 얻기 위해 이런 짓을, 다른 사람들이 작동하도록 허용하려면 다음 당신이해야 할 모든 서비스 호출에서 SQL을 변경할 수 있습니다 :

var sql = "SELECT * FROM TABLE(F_SUG_PUBS_BY_DESIGS('" + Desigs + "'))";