2016-08-03 23 views
-1

Wie kann ich eine Funktion in Postgres ausführen?So führen Sie Funktionen in Postgres aus

Ich habe versucht, die folgenden:

select pricelimit(); 

Aber es mir Fehler geben, die wie folgt lautet:

Keine Funktion entspricht den angegebenen Namen und Argumenttypen. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen.

Dies ist die Funktion:

CREATE OR REPLACE FUNCTION pricelimit(
    p_product_id numeric, 
    p_pricelist_version_id numeric) 
    RETURNS numeric AS 
$BODY$ 
DECLARE 
    v_Price  numeric; 
    v_ProductPrice numeric; 
    bom  record; 
BEGIN 
    -- Try to get price from PriceList directly 
    SELECT COALESCE (SUM(PriceLimit), 0) 
     INTO v_Price 
    FROM M_PRODUCTPRICE 
    WHERE M_PriceList_Version_ID=p_PriceList_Version_ID AND M_Product_ID=p_Product_ID; 
    IF (v_Price = 0) THEN 
     FOR bom in SELECT bl.M_Product_ID AS M_ProductBOM_ID, 
      CASE WHEN bl.IsQtyPercentage = 'N' THEN bl.QtyBOM ELSE bl.QtyBatch/100 END AS BomQty , p.IsBOM 
     FROM PP_PRODUCT_BOM b 
     INNER JOIN M_PRODUCT p ON (p.M_Product_ID=b.M_Product_ID) 
     INNER JOIN PP_PRODUCT_BOMLINE bl ON (bl.PP_Product_BOM_ID=b.PP_Product_BOM_ID) 
     WHERE b.M_Product_ID = p_Product_ID 
     LOOP 
      v_ProductPrice := Bompricelimit (bom.M_ProductBOM_ID, p_PriceList_Version_ID); 
      v_Price := v_Price + (bom.BOMQty * v_ProductPrice); 
     END LOOP; 
    END IF; 
    -- 
    RETURN v_Price; 
END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

und Funktion in der Datenbank vorhanden ist Wie kann ich dieses Problem lösen mir bitte

+0

Zeigen Sie uns die Funktion. – freakish

+0

[bearbeiten] Sie Ihre Frage und zeigen Sie uns die ** complete ** 'create function' Anweisung (_formatted_ text bitte, [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i- not-upload-images-of-code-auf-so-wenn-eine-Frage-Frage/285557 # 285557)) –

+0

Wie kann ich mit Parameter aufrufen – Lina

Antwort

1

Ihre Funktion erfordert zwei Parameter helfen, aber Sie nennen es ohne .

müssen Sie es so nennen:

select pricelimit(4, 2); 

Wo 4 der Wert für den Parameter ist p_product_id und 2 der Wert für den Parameter ist p_pricelist_version_id

das Handbuch finden Sie weitere Beispiele und Details:

0

Per Definition der Funktion

CREATE OR REPLACE FUNCTION pricelimit(
    p_product_id numeric, 
    p_pricelist_version_id numeric); 

Funktionsaufruf, wie die

select pricelimit(10, 4); 

Sie haben werden Parameter p_product_id und p_pricelist_version_id passieren.

, wenn Sie Standardwerte bilden Ihre Parameter übergeben wollen, müssen wir, wie unten die Funktionsdefinition ändern:

CREATE OR REPLACE FUNCTION pricelimit(
    p_product_id numeric default 0::numeric, 
    p_pricelist_version_id numeric default 0::numeric) 
    RETURNS numeric AS 
$BODY$ 
DECLARE 
    v_Price  numeric; 
    v_ProductPrice numeric; 
    bom  record; 
BEGIN 

    --function Defination 
END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 

dann können Sie Funktion aufrufen, wie diese

select pricelimit(); 

Hoffen, dass Ihr Zweifel gelöscht ....

Verwandte Themen