Petapoco-Oracleパイプライン関数を呼び出すと、「サポートされていない列のデータ型」例外が発生します

MB34

Oracleでパイプライン関数を呼び出すと、「サポートされていない列のデータ型」エラーが発生し、これを修正する方法がわかりません。

これがコードです。これは実際よりも少し単純ですが、まったく同じように機能します。

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つのタイプです:

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)
)
/

これが私のサービスコールです:

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; }
}
MB34

他の人がそれを機能させることができるようにするために、私は結果を得るためにこれを行いました:あなたがしなければならないのはあなたのサービス呼び出しのSQLを変更することです:

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ